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

为何遍历二维列表时for循环赋值可修改内层列表,一维列表却不行?

为什么一段Python代码能修改原列表,另一段不行?

代码示例及结果

Code 1

y = [['1', '2'], ['3', '4']]
for x in y:
    x[0] = x[0] + '9'

print(y)

结果: [['19', '2'], ['39', '4']]

Code 2

y = ['1', '2', '3', '4']
for x in y:
    x = x + '9'

print(y)

结果: ['1', '2', '3', '4']

原因解释

核心区别在于Python中可变对象与不可变对象的特性差异:

  • Code 1里的y是嵌套列表,循环中的x指向y内部的子列表(比如['1','2']),而列表属于可变对象。执行x[0] = x[0] + '9'时,是直接在子列表的内存地址上修改其内部元素,原列表y对这个子列表的引用没有改变,所以修改结果会直接反映到y中。
  • Code 2里的y是字符串列表,循环中的x是原列表中字符串元素的引用,但字符串属于不可变对象。执行x = x + '9'时,并没有修改原来的字符串,而是创建了一个全新的字符串(比如'19'),并让x指向这个新对象。但原列表y中的元素依然指向最初的字符串,所以y的内容不会发生变化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 18:17:00