为何遍历二维列表时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
相关产品推荐
相关产品推荐

