感谢浙江工业大学李强老师遇到与本文内容有关的问题并及时和我交流。
原始问题:下面的代码执行后为什么x的值是[2, 2]呢?
>>> x = [3, 5, 7]
>>> x = x[1:] = [2]
>>> x
[2, 2]
进一步,我们修改x列表的初始内容,会发现不管x的初始值是什么,执行x = x[1:] = [2]之后的x的值都是[2, 2]:
>>> x = [1, 2, 3, 3, 4, 5, 6]
>>> x = x[1:] = [2]
>>> x
[2, 2]
接下来我们重启Python shell,然后执行下面的代码:
>>> x = x[1:] = [2]
>>> x
[2, 2]
>>> del x
>>> x
Traceback (most recent call last):
File "<pyshell#49>", line 1, in <module>
x
NameError: name 'x' is not defined
>>> x = x[1:] = [2]
>>> x
[2, 2]
实际上这里有个小坑,这个问题的根源在于x = [1:] = [2]相当于x = [2]和x[1:] = [2]这两条语句,也就是说先创建列表x的值为[2],然后使用切片为其追加一个元素2,然后得到[2, 2]。
----------相关阅读----------
----------喜大普奔----------
1、继《Python程序设计基础》(2017年9月第5次印刷)、《Python程序设计(第2版)》(2017年9月第4次印刷)、《Python可以这样学》(2017年7月第3次印刷)系列图书之后,董付国老师新书《Python程序设计开发宝典》已于2017年8月1日在清华大学出版社出版,并于2017年9月进行了第2次印刷。为庆祝新书《Python程序设计开发宝典》全面上架,清华大学出版社联合“赣江图书专营”淘宝店推出特价优惠活动,《Python程序设计开发宝典》原价69元,新书上架期间超低价39.8元,可以复制下面的链接使用浏览器打开查看图书详情和购买:
https://detail.tmall.com/item.htm?spm=a1z10.3-b-s.w4011-14464369246.84.46f16db0roWfX4&id=557107249812&rn=339cbc9df2bac424664103917dedfbd2&abbucket=8&tbpm=3