2

我有以下代码:

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

它是否与全局变量和局部变量有关?

4

2 回答 2

6

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

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

from copy import copy

nodes = copy(tree['nodes'])

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

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

于 2020-11-11T11:13:46.077 回答
0

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

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

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

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

阅读本文以获取更多有关此内容的背景信息。

于 2020-11-11T11:35:02.220 回答