Python不同的代码结果

时间:2015-11-01 07:50:17

标签: python python-2.7

我刚刚开始学习和阅读Python,并且在阅读本书前几章时遇到的问题我有些疑问。我在和翻译一起玩的时候遇到过这个。

这是我的问题,这两个表达式的值如何不同。在第一个示例中,更改yx的值保持不变,而在更改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]

2 个答案:

答案 0 :(得分:4)

关于python reference。当

a = [2]
b = a

此处ab都引用了[2]。您可以按id

进行检查
>>>id(a)
3066750252L

>>>id(b)
3066750252L

两者都是相同的ID。因此a.appendb.append会同时影响ab。这是[2]。这是mutable个对象。{{{ 1}}也会影响a[0]=6。如果是整数,则不会影响,因为bint 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演示文稿以获得更完整的报道。