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

为什么未主动修改变量,Python中的变量却自动发生了变更?

根本原因

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

  • 列表属于可变对象,你定义的one本质是指向对应内存空间的引用。
  • 执行final_data.append(one)的时候,并没有复制one里的实际内容,只是把one指向的内存地址的引用存入了final_data,也就是说final_data里的元素和原one变量指向的是同一块内存空间。

执行过程拆解

  1. 第一次循环(r=1):
    此时one的值为['x'],append后final_data[0]和one指向同一块内存,内容为['x']。
  2. 第二次循环(r=2):
    执行one[0] = two[0]时,直接修改了one指向的内存空间里的内容,把值改成了'y'。因为final_data[0]和one共享内存,所以final_data[0]的内容也同步变成了['y']。之后再次appendone,相当于又往final_data里加了一个指向同一块内存的引用,最终两个元素的内容都是修改后的['y']。

解决方法

如果要实现你预期的[['x'], ['y']]效果,append时存入one的独立副本即可,避免和原变量共享内存,修改方式如下:

one = ['x']
two = ['y']
final_data = []
for r in range(1, 3):
    print(final_data, r)
    if r == 2:
        one[0] = two[0]
        print(one)
    # 改这里,用copy()方法创建副本,用one[:]切片也可以实现相同效果
    final_data.append(one.copy())
    print(final_data)
print(final_data)

运行后就会输出你预期的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:09:03