Python技术问询:为何嵌套列表元素会被多个子列表共享?
为什么
[list()] * 3修改一个元素会影响所有元素? 当你执行a = [list()] * 3时,Python并没有生成3个独立的空列表,而是先创建一个空列表对象,再让新列表的三个元素全部指向这个对象的引用。这意味着a[0]、a[1]、a[2]本质上是同一个列表的不同“别名”,对其中任何一个进行修改,都会直接作用于底层的同一个列表,所以最终所有位置都会显示相同的内容。
验证内存地址
你可以通过id()函数查看每个元素的内存地址,确认它们指向同一个对象:
a = [list()] * 3 print(id(a[0]), id(a[1]), id(a[2])) # 输出三个完全相同的内存地址
正确的写法
要创建3个独立的空列表,推荐使用列表推导式,它会在每次循环中生成新的列表对象:
a = [list() for _ in range(3)] a[0].append(1) print(a) # 输出: [[1], [], []]
或者直接显式创建三个独立的空列表:
a = [[], [], []]
内容的提问来源于stack exchange,提问作者Neo
相关产品推荐
相关产品推荐

