Python访问列表元素的不同方式:两类for循环修改列表的差异
Python两种列表遍历修改方式的逻辑差异
基于示例列表numbers = [0,1,2,3,4],两段代码的核心差异在于操作对象完全不同,结合Python的变量引用规则,具体区别如下:
第一段代码(无法修改原列表)
for item in numbers: item +=1
- 遍历列表时,
item是仅在循环内部生效的临时变量,会依次拷贝原列表中每个元素的取值(本例中是不可变的整数类型) - 执行
item +=1仅修改了临时变量本身的值,没有关联到原列表的存储地址,所以完全不会改动原列表
第二段代码(可正常修改原列表)
for i in range(len(numbers)): numbers[i] +=1
- 先通过列表长度生成对应的下标序列,遍历的是列表的位置索引
i - 执行
numbers[i] +=1时,是通过索引直接定位到原列表对应位置的存储地址,直接修改该地址存放的值,改动会直接作用到原列表上
补充说明
如果列表中存储的是字典、列表这类可变类型,第一种循环中如果修改可变对象的内部属性(例如item["key"] = 1),改动可以同步到原列表;但如果是对item本身重新赋值(例如item = {"new_key": 2}),依然不会影响原列表。
内容的提问来源于stack exchange,提问作者Giulio
相关产品推荐
相关产品推荐

