python - 为什么要为自己设置一个字典浅拷贝?

标签 python django dictionary shallow-copy

我觉得这个问题有点奇怪。
问题是,当我研究 Django 代码的某些部分时,我遇到了一些我以前从未见过的东西。
根据Copy Difference QuestionIt'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 = params.复制()。它只是使用相同的名称。因此,不能再通过这个名称访问旧对象。在接下来的步骤中,新的本地词典被修改,但原始词典保持不变。

使用 self.params = params 而不是 params = params.copy() 会产生截然不同的效果。在这种情况下,self.params 只是 params 后面对象的第二个名称。因为它是一个字典并且是可变的,所以对 self.params 的所有更改都会影响 paramsparams.pop('NAME') 删除键 NAME' 来自字典。实际上,检查它是否为空:params.pop('NAME')

关于python - 为什么要为自己设置一个字典浅拷贝?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34238544/

相关文章:

python - 如何使用tox仅测试一个功能?

django - 服务器 : respond to collectstatic with "yes" 上的自动 django 接收 Hook

python /Django : Why does importing a module right before using it prevent a circular import?

c# - 用文本框中的数字填充字典并将文本框作为键

list - "bad words"过滤器

javascript - 从嵌套数据结构创建自定义对象数组

sqlalchemy - 处理 sqlalchemy 模型的 Pythonic 方式

python - 如何使用编译的正则表达式和/或列表理解为机器学习管道准备文本?

python - 嵌套异常?

python - 如何在特定虚拟主机上处理 Celery 任务?