为什么这个赋值会失败,却不会报错?
在这段Python代码中,我期望x 要么被赋值为1,要么抛出一个错误/异常。相反,什么也没发生。该语句不是错误,但也没有任何作用。
x = 0
[x][0] = 1
这与我对Python语义的理解相矛盾。如果 [x][0] 是一个返回 0 的表达式,这应该报错,因为 0 = 1 是一个错误。
另一方面,如果 [x][0] 返回对 x 的引用,那么赋值应该会成功,并将 x 的值改为 1。到底是怎么了?
解决方案
你的程序创建了一个初始只包含一个元素0 的新列表,然后把第一个元素设为1。随后丢弃了结果,因为该列表没有被赋给任何变量名。它等价于下面的程序(其中 del 的作用类似于垃圾回收),直观上应该是有效的:
x = 0
l = [x]
l[0] = 1
del l
至于引用的问题,列表的创建和赋值都不进行解引用,因此修改 [x][0] 也不会同时改变 x。
x = 0
l = [x]
l[0] = 1
print(x) # 0
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。