python – 为什么要设置一个dict浅拷贝到自己?
作者:互联网
我想这是一个有点奇怪的问题.
问题是,当我研究django代码的某些部分时,我遇到了一些我以前从未见过的东西.
根据Copy Difference Question和
It’s usage in dictionary我们可以用相同的参考创建两个字典.
问题是将字典的浅层副本设置为自身的目的是什么?
码:
django.template.backends.base
params = {
'BACKEND' = 'Something',
'DIRS' = 'Somthing Else',
}
params = params.copy()
解决方法:
相关部分或django.template.backends.base.py看起来像这样:
class BaseEngine(object):
# Core methods: engines have to provide their own implementation
# (except for from_string which is optional).
def __init__(self, params):
"""
Initializes the template engine.
Receives the configuration settings as a dict.
"""
params = params.copy()
self.name = params.pop('NAME')
self.dirs = list(params.pop('DIRS'))
self.app_dirs = bool(params.pop('APP_DIRS'))
if params:
raise ImproperlyConfigured(
"Unknown parameters: {}".format(", ".join(params)))
def __init __(self,params)中的字典参数:将被复制到新的字典params = params.copy().它只使用相同的名称.因此,无法通过此名称访问旧对象.在接下来的步骤中,将修改新的本地字典,但原始字典保持不变.
做self.params = params,而不是params = params.copy()会产生非常不同的效果.在这种情况下,self.params将只是params背后对象的第二个名称.由于它是一本字典并且是可变的,所以对self.params的所有更改都会影响params. params.pop(‘NAME’)删除密钥NAME’
来自字典.实际上,检查它是否为空:params.pop(‘NAME’).
标签:python,dictionary,django,shallow-copy 来源: https://codeday.me/bug/20190519/1136122.html