Python代码的不同结果
我刚刚开始学习和阅读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
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。