在理解可变性和不变性概念的过程中,我尝试了不同的东西,遇到了这个:
当我编写如下所示的简单代码时(我将其称为代码 1):
<小时 />c=[1,2,3]
print(id(c))
c=c+[5]
print(c)
print(id(c))
输出如下:
1911612356928
[1, 2, 3, 5]
1911611886272
当我编写代码时(我将其称为代码 2):
<小时 />c=[1,2,3]
print(id(c))
c+=[5]
print(c)
print(id(c))
输出如下:
1911612356928
[1, 2, 3, 5]
1911612356928
由于c
是一个在 python 中可变的列表,我希望 ID 在代码 1 中保持不变,并对输出感到困惑。将代码中的语法从c+=[5]
更改为c=c+[5]
给了我一个不同的输出,其中c
的 ID 没有改变,尽管我在c
上执行与代码 1 中相同的操作。
- 为什么在第一种情况下
c
的 id 会发生变化,而在第二种情况下不会更改? c+=[5]
不等同于c=c+[5]
吗?
c += 5
和c = c + [5]
产生相同的c
值,但实现略有不同。
c += 5
是通过有效地append
5
c
来实现的单个语句。 也就是说,现有c
列表就地扩展;它id
不会改变。
c = c + [5]
包含两个语句。 第一个是c + [5]
,它会创建一个新列表(不同于原始列表c
)。 第二个是赋值,它将正确的操作数(由c + [5]
表达式创建的新列表)分配给名称c
。 由于 c 已被重新分配为指向新列表,因此其id
现在有所不同。
另一种看待它的方法是c = c + [5]
与以下内容相同:
temp = c + [5]
c = temp