當從我遍歷名單上有一些可重複的代碼在這裏:爲什麼我不能改變使用產量
def test():
a = [0, 1, 2, 3]
for _ in range(len(a)):
a.append(a.pop(0))
for i in range(2,4):
print(a)
yield(i, a)
此打印出:
[1, 2, 3, 0]
[1, 2, 3, 0]
[2, 3, 0, 1]
[2, 3, 0, 1]
[3, 0, 1, 2]
[3, 0, 1, 2]
[0, 1, 2, 3]
[0, 1, 2, 3]
這是我所期待的,但是當我做list(test())
我得到:
[(2, [0, 1, 2, 3]),
(3, [0, 1, 2, 3]),
(2, [0, 1, 2, 3]),
(3, [0, 1, 2, 3]),
(2, [0, 1, 2, 3]),
(3, [0, 1, 2, 3]),
(2, [0, 1, 2, 3]),
(3, [0, 1, 2, 3])]
爲什麼是這樣的話,我能做些什麼來解決它?
因爲你總是返回一個*引用*到列表中,而不是* *副本*的列表。 –
您僅打印「a」,但返回(i,a)。 –
@AndreyLukyanenko:我認爲OP對列表的*內容*感到困惑:所有收益率都有相同的列表。 –