Python代码的不同结果

Python代码的不同结果,python,python-2.7,Python,Python 2.7,我刚刚开始学习和阅读Python,在阅读本书的前几章时,我有一个问题,我在理解上有困难。我是在和翻译玩的时候遇到这个的 我的问题是,这两个表达式中的值为何不同。在第一个示例中,y的值在更改x后保持不变,而在下一个示例中,当更改x时,它也会更改y的值 例1: >>> x = 5 >>> y = x >>> x += 1 >>> x 6 >>> y 5 示例:2 >>> x = [5] &g

我刚刚开始学习和阅读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]

它是关于
python参考

a = [2]
b = a
这里的
a
b
都引用了
[2]
。您可以通过
id

>>>id(a)
3066750252L

>>>id(b)
3066750252L
两者都是相同的ID。因此
a.append
b.append
将同时影响
a
b
。也就是说
[2]
。这是在
可变对象的情况下。因此
a[0]=6
也会影响
b
。对于整数,它不会影响,因为,
int
不可变的
对象。所以

>>>a = 2
>>>id(a)
164911268
>>>a = a + 1
>>>a
3
>>>id(a)
164911256
此处
id
已更改。这意味着新的
int
对象已创建
3
。它现在由变量
a
引用


希望这有帮助

所讨论的两个对象的值不同,一个是
int
不可变,另一个是
列表
可变

通过将两个名称
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
只需更改内容即可。请查看演示文稿以了解更全面的内容。

x+1
x+=1
?(只是一个提示,不是问题)是的,x+=1。