我正在使用shuffle来置换列表的内容。第一次迭代按预期工作,并产生原始列表的排列。然而,在第二次迭代之后,我得到了写入文件的相同排列。为什么代码在前进的迭代中不会产生另一种排列?
import random;
f = open('GenerationNumbers.txt', 'w')
request = [ 128,
512,
2048,
512,
64,
64,
512,
1024,
1024,
64,
]
#server
server = [ 4096,
2048,
2048
]
newrequest = []
newserver = []
for i in range(0, 30):
random.shuffle(request)
newrequest.append(request)
random.shuffle(server)
newserver.append(server)
f.write(str(newrequest)+"\n")
f.write(str(newserver))
f.flush()
f.close()
以下是输出文件的一部分:
[[1024,64,512,512,128,64,2048,64,512,1024],[1024,64,512,512,128,64,2048,64,512,1024],[1024] ,64,512,512,128,64,2048,64,512,1024],[1024,64,512,512,128,64,2048,64,512,1024],[1024,64,512,512] ,128,64,2048,64,512,1024] ....
[[2048,4096,2048],[2048,4096,2048],[2048,4096,2048],[2048,4096,2048],[2048,4096,2048],[2048,4096,2048] ],[2048,4096,2048],[2048,4096,2048],[2048,4096,2048],[2048,4096,2048],[2048,4096,2048],[2048,4096,2048], ...
答案 0 :(得分:5)
您反复添加对相同列表的引用,并将它们混合到位。如果要使用不同的顺序保留列表的不同副本,则必须在每次迭代时复制列表。
你可以这样做:
for i in range(0, 30):
random.shuffle(request)
newrequest.append(request[:])
random.shuffle(server)
newserver.append(server[:])