Python元素为何被追加至错误列表?技术咨询
问题分析:列表追加元素时两个列表同步变化的原因
你碰到的这个情况,本质是Python里列表赋值的特性在搞鬼——列表的直接赋值是引用传递,不是创建新的副本。
看你代码里的这行:
probableX = possibleX
这行代码并没有把possibleX里的元素复制一份生成新列表给probableX,而是让probableX和possibleX指向了内存里同一个列表对象。就像两个人共用同一本笔记本,不管是谁在本子上写东西,另一个人翻开看到的都是更新后的内容。
对应到你的输出:
- 第一次
print(1, len(possibleX), len(probableX))时,两个变量指向同一个长度为8的列表,所以输出1 8 8; - 当你执行
probableX.append(element),这个操作是在共享的那个列表上添加元素,所以possibleX的长度也跟着变成9,第二次print就输出2 9 9,和你实际看到的结果完全匹配。
解决办法
如果想让probableX成为possibleX的独立副本,需要显式创建拷贝,常用的几种方式:
- 切片语法:
probableX = possibleX[:] - 使用
list()构造函数:probableX = list(possibleX) - 用
copy模块:import copy; probableX = copy.copy(possibleX)(如果是嵌套列表需要用copy.deepcopy(),你的场景用普通拷贝就够)
修改后,两个列表就是完全独立的对象,对probableX的append操作就不会影响possibleX了,你预期的输出就能正常出现。
内容的提问来源于stack exchange,提问作者Someone
相关产品推荐
相关产品推荐

