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

Python中list的append方法是复制对象还是创建引用?

Python循环中字典append的引用问题

先看你给出的代码:

simple_list = ['a', 'b', 'c']
dict_list = []
for x in simple_list:
    local_dict = {'key': x}
    dict_list.append(local_dict)
print(dict_list)

直接给结论:调用append时添加的是字典的引用,但因为你每次循环都用local_dict = {'key': x}创建了一个全新的字典对象,所以dict_list里的每个元素都是独立的字典,不会出现后续修改影响之前元素的情况。

你的原理解是错的:

  1. 首先,Python里的append从来不会自动复制对象,它只会把对象的引用添加到列表里。
  2. 其次,Python的for循环不会为循环体创建单独的作用域,循环内的变量local_dict在循环结束后并不会“超出作用域”消失,它会一直存在直到所在的更大作用域结束。

但为什么你的代码结果是对的?因为每次循环里的{'key': x}都会生成一个新的字典对象,local_dict每次都被重新赋值,指向这个新对象。所以你append到列表里的引用,每个都指向不同的字典,最终输出的[{'key': 'a'}, {'key': 'b'}, {'key': 'c'}]是正确的。

举个反例你就明白差别了:如果把字典创建移到循环外面,循环内只修改字典的值,那append的就都是同一个字典的引用,最终列表里的所有元素都会是最后一次修改后的结果:

simple_list = ['a', 'b', 'c']
dict_list = []
local_dict = {}  # 只创建一次字典
for x in simple_list:
    local_dict['key'] = x
    dict_list.append(local_dict)
print(dict_list)  # 输出: [{'key': 'c'}, {'key': 'c'}, {'key': 'c'}]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 10:40:56