a = [0]
b = a
a[0] = 1
print b
这将打印1,为什么这适用于列表但不适用于int或者浮动或类似的东西?
答案 0 :(得分:3)
a = [0] # create an int, create a container referencing the int, let "a" reference the container
b = a # let "b" reference the same container as "a"
a[0] = 1 # create another int, let container "a" reference the new int
print b # "b" and "a" refer to the same container with the new contents
请参阅此Python Tutor visualization以更清楚地了解正在发生的事情。
答案 1 :(得分:1)
Python中的所有类型都是引用类型。 诀窍是有些是可变的,有些则不是。 int
和float
是不可变的。值42不能改变。每次为变量赋值时,它都指向一个新值。
a
和b
都在您的代码中引用相同的数组。这就是为什么当您使用一个标识符修改数组时,您会看到使用其他标识符访问该值时反映的更改。
答案 2 :(得分:0)
如果您在复制列表时遇到问题,可以试试这个
>>> a = [0]
>>> b = a[:]
>>> a[0] = 1
>>> a
[1]
>>> b
[0]