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

Python拆分元组列表时出现异常行为的原因探究

问题原因解析

你的代码失效的核心问题出在这一行:

arr = [[]]*2

这行代码不是创建两个独立的空列表,而是创建了一个包含两个指向同一个空列表对象的引用的列表。也就是说,arr[0]和arr[1]在内存中指向的是同一个列表,不管你往arr[0]还是arr[1]里添加元素,本质上都是在操作同一个底层列表。所以最后打印时,两个子列表显示的内容完全相同——因为它们本来就是同一个东西。

你可以用id()函数验证这一点:

data = [(0,1),(0,2),(1,1),(1,2),(1,3)] 
arr = [[]]*2 
print(id(arr[0]), id(arr[1]))  # 输出两个相同的内存地址

修复方法

把创建arr的代码改成以下两种方式之一,就能生成两个独立的空列表:

  1. 直接显式创建两个空列表:
arr = [[], []]
  1. 使用列表推导式(更适合子列表数量较多的场景):
arr = [[] for _ in range(2)]

修改后再运行你的循环代码,就能得到预期的结果:

[[(0, 1), (0, 2)], [(1, 1), (1, 2), (1, 3)]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 23:14:58