为什么shuffle在以下代码中从第二次迭代开始生成相同的排列?

kau*_*ray 0 python random list

我正在使用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()
Run Code Online (Sandbox Code Playgroud)

以下是输出文件的一部分:

[[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],......

khe*_*ood 5

您将一遍又一遍地添加对相同列表的引用,并将它们混合到位.如果要使用不同的顺序保留列表的不同副本,则必须在每次迭代时复制列表.

你可以这样做:

for i in range(0, 30):
    random.shuffle(request)
    newrequest.append(request[:])
    random.shuffle(server)
    newserver.append(server[:])
Run Code Online (Sandbox Code Playgroud)