【发布时间】:2020-05-29 22:14:19
【问题描述】:
我正在玩一段代码,在此期间我偶然发现了 Python 的一些意外行为。
我定义了一个列表如下:
a = [1, 2, 3]
用循环制作另一个列表:
res = (item for item in a if a.count(item) > 0)
print(list(res)) # [1, 2, 3] -- as expected -- Consider this is line 1
后来我改变了第一个列表的初始值:
a = [7, 2, 9]
我预计 res 不会发生变化,因为我对 a 所做的更改是在创建 res 之后发生的,但令我惊讶的是, res 的值发生了变化。
print(list(res)) # prints [] -- Consider this as line 2
更令人震惊的是,print的结果取决于第1行的print语句,如果我在第1行注释掉print语句,那么第2行就会打印[2]
谁能解释一下这里发生了什么?
【问题讨论】:
-
变量
x未在任何地方设置。 -
谢谢,我已经编辑了。
-
重新分配
a与此无关。如果你只是连续两次print(list(res)),你会看到同样的效果。 -
认真考虑学习python的协议和生成器
-
顺便说一句,
(item for item in a if a.count(item) > 0)是一种低效的算法,它是二次时间,你可以在线性时间内完成
标签: python arrays python-3.x list