我正在使用大型嵌套词典,并且正在尝试删除嵌套子词典。我想知道为什么会发生以下行为。
当我设置对字典d的引用(称为ref)时,然后更改ref并打印d,它显示d的更新版本,并添加了第三个元素。
input:
d={"a":1,"b":2}
ref=d
ref["c"]=3
print(d)
output:
{'a': 1, 'b': 2, 'c': 3}
鉴于此行为,我期望能够通过delete删除字典
input:
d={"a":1,"b":2}
ref=d
del ref
print(d)
output:
{'a': 1, 'b': 2}
我想知道在删除引用时是否有一种删除原始对象的方法(这意味着第二个程序的输出将是错误的,因为删除了d。
最佳答案
del
statement的行为会有所不同,具体取决于要删除的内容。稍微解释一下:
这是第二种情况。您有两个对同一个对象的引用。名称ref
已被删除,但名称d
仍然存在并且始终指向同一对象。
但是,属性,订阅和切片具有不同的行为:
这更像第一种情况-从任一名称中删除元素将在另一名称中反射(reflect)出来:
input:
d = {"a":1, "b":2}
ref = d
del ref["a"]
print(d)
output:
{'b': 2}
因此,将引用包装在字典(或其他容器)中,将允许任何引用删除。