Python中的删除方法

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

它以某种方式与全局和局部变量有关吗?

Meh*_*far 6

二者nodestree['nodes']指的是相同的内存块。这意味着它们是相同的。通过更改其中任何一个,两者都会受到影响。

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

from copy import copy

nodes = copy(tree['nodes'])
Run Code Online (Sandbox Code Playgroud)

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

另请查看此链接,它可能对更好的线索有用。