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

为何Python中del操作会同时修改原字典response与新列表x?

为什么修改列表x时字典response也会同步变化?

这是因为Python中可变对象的引用传递机制导致的:

  • 列表属于可变对象,当你执行x.append(my_dict['input_1'])时,并没有把input_1对应的列表复制一份放进x,而是把这个列表的引用地址存到了x里。也就是说,x里的元素和response里的input_1、input_2指向的是同一个内存中的列表对象。
  • 后续执行del x[i][0:2]时,本质是通过引用直接修改了内存中的原列表对象,所以response里对应的列表自然会同步发生变化。

解决方法:创建列表副本

如果只想修改x而不影响原response,需要在添加到x时创建列表的副本,切断和原对象的引用关联。常见的方式有:

  • 使用列表的copy()方法
  • 使用切片[:]创建副本
  • 用list()构造函数生成新列表

修改后的x构建代码如下:

x = []
for my_dict in response['result']:
    # 创建input_1的副本,避免引用原对象
    x.append(my_dict['input_1'].copy())
    # 创建input_2的副本
    x.append(my_dict['input_2'].copy())

如果你的列表存在多层嵌套(比如示例中的二维列表),需要完全独立的副本时,要使用深拷贝copy.deepcopy():

import copy

x = []
for my_dict in response['result']:
    x.append(copy.deepcopy(my_dict['input_1']))
    x.append(copy.deepcopy(my_dict['input_2']))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 02:05:24