You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现幂集时list append操作异常的原因及解决方法

问题根源

Python 中的列表属于可变对象,你调用ans.copy()执行的是浅拷贝:仅拷贝了外层ans列表的结构,内层的子列表仍然和原列表中的子列表指向同一块内存地址。
你在修改后半部分子列表的时候,前半部分和它指向同一对象的子列表也会同步被修改,最终就出现了所有元素同步更新的问题。
结合你的输入[0,1]可以验证执行逻辑:

  • 第一次处理元素0时,ans.extend(ans.copy())后得到的[[], []]中两个空列表是同一个引用,给索引1的子列表追加0后,两个子列表都变成[0],此时ans = [[0], [0]]
  • 第二次处理元素1时,ans.extend(ans.copy())后得到四个[0],全部指向同一引用,给后两个子列表追加1的操作会作用到所有子列表上,最终得到你看到的全相同的异常输出。
修复方法

只需要在扩展ans的时候,对内层每个子列表单独做拷贝,保证新旧子列表是独立的对象即可,修改后的代码如下:

def powerset(array):
    ans = [[]]
    for elem in array:
        # 遍历当前ans的每个子列表,拷贝后再扩展
        ans.extend([sub.copy() for sub in ans])
        for j in range(int(len(ans)/2), len(ans)):
            ans[j].append(elem)
    return ans

测试输入[0,1],返回结果为[[], [0], [1], [0, 1]],符合预期。

内容的提问来源于stack exchange,提问作者Mathphile

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 15:06:01