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]