繁体   English   中英

更改原始对象时更改的对象列表

[英]List of Objects being Changed when Original Object is Changed

在Python中,如果我写:

a = [1]
b = 3 * [a]
a.append(2)
print a, b

然后,输出是:

[1, 2] [[1, 2], [1, 2], [1, 2]]

但是,当我写:

a = [1]
b = 3 * a # notice the missing brackets here 
a.append(2)
print a, b

原来是:

[1, 2] [1, 1, 1]

这里发生了什么?

在第一个例子中,想一想Python对这个语句的作用:

b = 3 * [a]

它成为了:

b = [[a], [a], [a]]

因此,改变a将反映在b ,因为b a对象构成。

但是,在第二个示例中,您执行此操作:

b = 3 * a

这会创建列表a的副本,相当于:

b = [1, 1, 1]

因此,附加到当a这个时候,没有什么改变。

这是因为当你执行b = 3 * [a] ,对变量a的引用不会丢失。 因此,a中所做的任何更改都将在b中复制。

但是,当您运行b = 3 * a新的list被创建的实例,其中有没有提到a列表了。

Python中的所有数据结构都是对象,变量指向它们。 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM