遍历Python列表时,获取的是元素副本还是原对象本身?
Python列表遍历:循环变量是原对象还是副本?
遍历Python列表时,循环变量是原列表元素的引用,不是元素的副本,但要区分两种操作的差异:
1. 修改对象本身会改变原列表
比如这段代码:
lst = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] for i in lst: i.append(0)
这里的i指向原列表中的每一个子列表对象,append(0)是直接修改这个子列表对象本身,所以原列表里的元素会跟着变化,最终lst变成[[1, 2, 3, 0], [4, 5, 6, 0], [7, 8, 9, 0]]。
2. 给循环变量重新赋值不影响原列表
再看这段代码:
for i in lst: i = 3
i = 3只是把变量i的指向改成了整数对象3,并没有修改原来的子列表对象。原列表里的元素还是原来的子列表,所以lst不会有任何变化。
核心区别
- 如果操作的是对象的可变方法/属性,会直接改动原列表中的元素,因为你操作的是原对象本身。
- 如果是给循环变量重新赋值,只是改变了变量的指向,和原列表里的元素无关。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

