在python 3.4交互式提示符中:
>>> l = [a,b] = [0,1]
>>> a is l[0]
True
>>> b is l[1]
True
>>> l[0] = 2
>>> a
0
>>> l
[2, 1]
我假设以下语句执行列表第一个元素的更改。
l[0] = 2
由于变量a引用同一个对象,为什么它的值仍为0?在这个赋值语句中内部会发生什么?
答案 0 :(得分:3)
这是因为您实际上在a
,b
和l
创建了三个变量。只有最后一个是列表。逐行格式发生了什么:
a = 0
b = 1
l = [a, b] #which means l = [0, 1], not really the same referencing element a, b
然后,如果你检查
a is l[0]
b is l[1]
两者都返回true
,因为它们的值相同,但值,而不是引用
然后当你改变时:
l[0] = 2
仅l[0]
中的值发生变化,不会影响a
。最好是使用PyCharm
之类的好调试工具进行检查。它会在监视窗口中显示并内联变量的所有当前值。
答案 1 :(得分:1)
a
和l[0]
是同一个对象的两个名称,但当您说l[0] = 2
时,您只是重新定义l[0]
。 a
仍然指的是与之前相同的对象;只是l[0]
发生了变化。 a
指的是一个对象,而不是一个位置。
答案 2 :(得分:0)
我认为混淆是由于最初的任务:
l = [a,b] = [0,1]
这相当于:
t = [0, 1]
l = [a, b] = t
反过来相当于:
t = [0, 1]
a = t[0]
b = t[1]
l = t
反过来相当于:
l = [0, 1]
a = l[0]
b = l[1]
其余部分也是如此。