G. *_*are 1 python iterable list
在 Python 中,迭代列表时无法修改列表。例如,下面我无法修改list_1
,并且结果print
将是[0, 1, 2, 3, 4]
。在第二种情况下,我循环遍历类实例列表,并调用该set_n
方法修改列表中的实例,同时迭代它。确实,意志print
给予[4, 4, 4, 4, 4]
。
这两个案例有何不同,为什么?
# First case: modify list of integers
list_1 = [0, 1, 2, 3, 4]
for l in list_1:
l += 1
print(list_1)
# Second case: modify list of class instances
class Foo:
def __init__(self, n):
self.n = n
def set_n(self, n):
self.n = n
list_2 = [Foo(3)] * 5
for l in list_2:
l.set_n(4)
print([l.n for l in list_2])
Run Code Online (Sandbox Code Playgroud)
当然可以在迭代列表时修改列表,您只需引用该列表,而不是包含列表值的变量。
for i in range(len(list_1)):
list_1[i] += 1
Run Code Online (Sandbox Code Playgroud)
第二种情况的区别在于变量包含对可变容器对象的引用。您正在修改该对象的内容,而不是分配给变量。
归档时间: |
|
查看次数: |
2602 次 |
最近记录: |