为什么变量赋值在列表中如此工作?

时间:2016-10-20 03:20:30

标签: python variables

a = [0]
b = a
a[0] = 1

print b

这将打印1,为什么这适用于列表但不适用于int或者浮动或类似的东西?

3 个答案:

答案 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中的所有类型都是引用类型。 诀窍是有些是可变的,有些则不是。 intfloat是不可变的。值42不能改变。每次为变量赋值时,它都指向一个新值。

ab都在您的代码中引用相同的数组。这就是为什么当您使用一个标识符修改数组时,您会看到使用其他标识符访问该值时反映的更改。

答案 2 :(得分:0)

如果您在复制列表时遇到问题,可以试试这个

>>> a = [0]
>>> b = a[:]
>>> a[0] = 1
>>> a
[1]
>>> b
[0]