我想这是一个有点奇怪的问题.
问题是,当我研究django代码的某些部分时,我遇到了一些我以前从未见过的东西.
根据复制差异问题及其
在字典中的用法,我们可以创建两个具有相同引用的字典.
问题是将字典的浅层副本设置为自身的目的是什么?
码:
django.template.backends.base
params = { 'BACKEND' = 'Something', 'DIRS' = 'Somthing Else', } params = params.copy()
Mike Müller.. 5
相关部分或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)))
字典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')
.
相关部分或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)))
字典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')
.