Python for循环误把列表自身append进列表时,运行原理是什么?
运行逻辑与输出原因说明
实际执行流程
- 执行
secret_num = []时,会在内存中创建一个空的列表对象,Python中列表属于可变对象,变量secret_num存储的是这个列表的内存引用,而非列表的独立拷贝。 - 循环总共执行4次,每次执行
secret_num.append(secret_num)时,你并没有传入新生成的随机数,而是把secret_num自身的引用作为元素追加到了列表末尾:- 第1次循环结束后,列表内容为
[<secret_num自身引用>] - 第2次循环结束后,列表内容为
[<自身引用>, <自身引用>] - 4次循环结束后,列表内就存储了4个指向自身的引用。
- 第1次循环结束后,列表内容为
输出[[...], [...], [...], [...]]的原因
Python打印包含循环引用的对象时,为了避免陷入无限递归打印的死循环,会用...代替循环引用的递归部分。你看到的每一个[...]都是指向secret_num本身的引用,如果强行展开会出现无限套娃的结构[[[[[...]]]]],所以Python直接用省略号做了简化展示。
修正方案
把append的参数改为你生成的随机数变量num即可:
from random import choice secret_num = [] for i in range(4): num = choice(range(10)) secret_num.append(num) print(secret_num)
内容的提问来源于stack exchange,提问作者Jack Ryandal
相关产品推荐
相关产品推荐

