我有以下代码:
tree = {'nodes':[1,2,3],'root':[1]}
nodes = tree['nodes']
nodes.remove(2)
print(tree['nodes'])
print(nodes)
输出如下:
[1, 3]
[1, 3]
我的问题可能很愚蠢,但我不明白为什么remove
方法导致tree
变量也发生了变化?
我想,当我在上面的例子中创建一个像nodes
这样的新变量时,应用于该变量的任何方法都只会影响该变量。
从这个例子中,我可以得出结论,它也对tree
变量产生了影响。
它在某种程度上与全局和局部变量有关吗?
nodes
和tree['nodes']
都指向同一内存块。这意味着他们是一样的。如果改变其中任何一个,两者都会受到影响。
为了避免这种情况,可以使用copy
。
from copy import copy
nodes = copy(tree['nodes'])
在这种情况下,它们指的是不同的内存块,因此它们是完全分离的。
也可以看看这个链接,它可能对更好的线索有用。
这实际上不是一个愚蠢的问题。
大多数像我这样有C++
等语言基础的人在开始学习Python
甚至Java
时都会遇到一些困难。
与C++不同,在Python中,所有内容都作为引用返回。
因此,即使您通过另一个变量访问对象的一部分,您仍然在访问对象的同一部分。
阅读本文,了解更多相关内容。