Joh*_*now 2 python dictionary copy list remove-method
我有以下代码:
tree = {'nodes':[1,2,3],'root':[1]}
nodes = tree['nodes']
nodes.remove(2)
print(tree['nodes'])
print(nodes)
Run Code Online (Sandbox Code Playgroud)
输出如下:
[1, 3]
[1, 3]
Run Code Online (Sandbox Code Playgroud)
我的问题可能很愚蠢,但我不明白为什么remove方法导致该tree变量也发生了变化?
我认为当我像nodes上面的例子一样创建一个新变量时,任何应用于这个变量的方法只会影响这个变量。
从这个例子中,我可以得出结论,它也对一个tree变量产生了影响。
它以某种方式与全局和局部变量有关吗?
二者nodes并tree['nodes']指的是相同的内存块。这意味着它们是相同的。通过更改其中任何一个,两者都会受到影响。
为避免这种情况,您可以使用copy.
from copy import copy
nodes = copy(tree['nodes'])
Run Code Online (Sandbox Code Playgroud)
在这种情况下,它们指的是不同的内存块,因此它们是完全分开的。
另请查看此链接,它可能对更好的线索有用。