移除Python中的方法



我有以下代码:

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变量产生了影响。

它在某种程度上与全局和局部变量有关吗?

nodestree['nodes']都指向同一内存块。这意味着他们是一样的。如果改变其中任何一个,两者都会受到影响。

为了避免这种情况,可以使用copy

from copy import copy
nodes = copy(tree['nodes'])

在这种情况下,它们指的是不同的内存块,因此它们是完全分离的。

也可以看看这个链接,它可能对更好的线索有用。

这实际上不是一个愚蠢的问题。

大多数像我这样有C++等语言基础的人在开始学习Python甚至Java时都会遇到一些困难。

与C++不同,在Python中,所有内容都作为引用返回。

因此,即使您通过另一个变量访问对象的一部分,您仍然在访问对象的同一部分。

阅读本文,了解更多相关内容。

最新更新