当我使用 list=list+something 时,list 的 id 正在更改,但当我使用 list+=someth

  • 本文关键字:list list+ someth id list+something python list
  • 更新时间 :
  • 英文 :


在理解可变性和不变性概念的过程中,我尝试了不同的东西,遇到了这个:

当我编写如下所示的简单代码时(我将其称为代码 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 中相同的操作。

  1. 为什么在第一种情况下c的 id 会发生变化,而在第二种情况下不会更改?
  2. c+=[5]不等同于c=c+[5]吗?

c += 5c = c + [5]产生相同的c值,但实现略有不同。

c += 5是通过有效地append5c来实现的单个语句。 也就是说,现有c列表就地扩展;它id不会改变。

c = c + [5]包含两个语句。 第一个是c + [5],它会创建一个新列表(不同于原始列表c)。 第二个是赋值,它将正确的操作数(由c + [5]表达式创建的新列表)分配给名称c。 由于 c 已被重新分配为指向新列表,因此其id现在有所不同。

另一种看待它的方法是c = c + [5]与以下内容相同:

temp = c + [5]
c = temp

最新更新