我刚刚开始学习和阅读Python,并且在阅读本书前几章时遇到的问题我有些疑问。我在和翻译一起玩的时候遇到过这个。
这是我的问题,这两个表达式的值如何不同。在第一个示例中,更改y
后x
的值保持不变,而在更改x
的下一个示例中,它也会更改y
的值。< / p>
示例1:
>>> x = 5
>>> y = x
>>> x += 1
>>> x
6
>>> y
5
示例:2
>>> x = [5]
>>> y = x
>>> x[0] = 6
>>> x
[6]
>>> y
[6]
答案 0 :(得分:4)
关于python reference
。当
a = [2]
b = a
此处a
和b
都引用了[2]
。您可以按id
>>>id(a)
3066750252L
>>>id(b)
3066750252L
两者都是相同的ID。因此a.append
或b.append
会同时影响a
和b
。这是[2]
。这是mutable
个对象。{{{ 1}}也会影响a[0]=6
。如果是整数,则不会影响,因为b
是int
object.So
immutable
此处>>>a = 2
>>>id(a)
164911268
>>>a = a + 1
>>>a
3
>>>id(a)
164911256
已更改。这意味着创建了新的id
对象int
。它现在由变量3
引用。
希望这有帮助
答案 1 :(得分:3)
有问题的两个对象的价值不同,其中一个是int
不可变 ,而另一个list
是可变的。
通过将两个名称x, y
分配给5
,您可以为同一个值5
创建两个不同的 名称 。执行操作时:
In [1]: x = y = 5
In [2]: x = x + 1
In [3]: x
Out[3]: 6
In [4]: y
Out[4]: 5
x+1
返回一个新的 int
对象,因为您无法更改int的值。
list
类型是可变的。因此,当您创建两个引用相同列表的名称,然后通过x[0] = 1
通过赋值更改其内容的值时,它只会影响x
引用的列表,并且不会创建新列表。因此,y
也可以看到此分配的结果,因为它们引用相同的 可变 对象:
In [11]: x = y = [5]
In [12]: x[0] = 1
In [13]: x
Out[13]: [1]
In [14]: y
Out[14]: [1]
请注意,添加x = x + [1]
会创建一个新列表,您使用x[0]=1
执行的操作只是更改内容。请查看this演示文稿以获得更完整的报道。