Python使用*乘法初始化嵌套列表出现元素异常重复问题求助
根因分析
你遇到的是Python列表*操作符的浅拷贝特性导致的问题:
- 你使用的
[[".",] * 10 ] * NumberOfHosts写法中,外层的* NumberOfHosts只会复制内层列表的引用,并不会创建新的独立内层列表,最终TenLast里所有的子列表都指向同一个内存地址。 - 当你在循环中修改任意一个子列表的元素时,本质都是修改同一个列表对象,因此最后所有子列表的首个元素都会被覆盖为最后一次循环赋值的6。
解决方案
使用列表推导式初始化列表,每次循环主动创建新的独立子列表即可:
# 替换原初始化代码即可 TenLast = [["."] * 10 for _ in range(NumberOfHosts)]
修改后所有子列表都是独立的对象,修改操作不会互相影响,运行后就能得到你预期的输出结果。
验证方法
可以通过id()函数校验对象内存地址确认问题:
- 原初始化方案下
id(TenLast[0]) == id(TenLast[1])返回True,说明是同一个对象 - 列表推导式初始化方案下
id(TenLast[0]) == id(TenLast[1])返回False,说明是独立对象
内容的提问来源于stack exchange,提问作者HEP
相关产品推荐
相关产品推荐

