2015-11-01 61 views
3

我刚刚开始学习和阅读关于Python的知识,并且在阅读本书的前几章时遇到了麻烦。在翻译过程中,我遇到了这个问题。Python不同的结果代码

这是我的问题,这两个表达式的值是如何不同的。在第一个示例中,y的值在更改x后保持不变,而在下一个示例中,当更改x时,它也会更改值y

实施例1:

>>> x = 5 
>>> y = x 
>>> x += 1 
>>> x 
6 
>>> y 
5 

实施例:2个

>>> x = [5] 
>>> y = x 
>>> x[0] = 6 
>>> x 
[6] 
>>> y 
[6] 
+2

'x + 1'或'x + = 1'? (只是一个提示,而不是问题) –

+1

是的,X + = 1抱歉编辑。 – user3400748

回答

4

及其约python reference。当

a = [2] 
b = a 

这里a,和b都引用于[2]。您可以检查它由id

>>>id(a) 
3066750252L 

>>>id(b) 
3066750252L 

两者都是相同的ID。所以a.appendb.append将影响ab。那是[2]。这是在mutable objects.So a[0]=6情况下会影响整数b also.In情况下,也不会影响,因为,intimmutable object.So

>>>a = 2 
>>>id(a) 
164911268 
>>>a = a + 1 
>>>a 
3 
>>>id(a) 
164911256 

这里id changed.That意味着新int对象被创建3。它现在由可变a引用。

希望这有助于

3

所讨论的两个对象的值不同,其一,int不变而其他的list是可变的。

通过x, y5创建两个不同的为同一值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演示文稿以获得更完整的报道。

相关问题