Python 2.7 python中相同内容的不同输出
结果显示为:Python 2.7 python中相同内容的不同输出,python-2.7,Python 2.7,结果显示为: sr = [12,13,4] thre = 1 kaju = [] for p in range(len(sr)): sr[p] -= thre kaju.append(sr) print sr print kaju for p in range(len(sr)): sr[p] -= thre kaju.append(list(sr)) print sr print kaju 我不知道为什么sr和kaju不一样列表在P
sr = [12,13,4]
thre = 1
kaju = []
for p in range(len(sr)):
sr[p] -= thre
kaju.append(sr)
print sr
print kaju
for p in range(len(sr)):
sr[p] -= thre
kaju.append(list(sr))
print sr
print kaju
我不知道为什么sr和kaju不一样列表在Python中是通过引用传递的。因此,当您将sr
附加到kaju
时,您只是将另一个引用附加到同一列表中。因此,您的print语句反映了每次迭代时对sr
的更改,但是kaju
只包含对同一列表的一系列引用
如果希望kaju
的元素反映每次迭代时的更改,则必须在每次迭代时复制sr
的值,这可以通过内置的list()
函数完成
[11, 13, 4]
[11, 12, 4]
[11, 12, 3]
[[11, 12, 3], [11, 12, 3], [11, 12, 3]
输出:
sr = [12,13,4]
thre = 1
kaju = []
for p in range(len(sr)):
sr[p] -= thre
kaju.append(sr)
print sr
print kaju
for p in range(len(sr)):
sr[p] -= thre
kaju.append(list(sr))
print sr
print kaju
因为每次调用append时都会在
sr
中追加整个列表。您可能只想附加sr[p]