python的random.shuffle有问题 - python

我想制作一个矩阵,其行是以下vector =的不同排列
[1,2,3,4,5,10,10,10,10,10]
我尝试使用random.shuffle函数,但似乎每次使用它时,它都会重新定义为其分配的所有对象。例如,我尝试了以下方法:

vec=[1,2,3,4,5]  
for i in range(5):  
    vec.append(10)  
Matpreferences=[]  
for i in range(10):  
    random.shuffle(vec)  
    Matpreferences.append(vec)  

但是然后我得到所有行都相等的矩阵。
例如:

[0, 0, 1.0, 0, 2.0, 3.0, 0, 0.5, 2.5, 1.5, 0]    
[0, 0, 1.0, 0, 2.0, 3.0, 0, 0.5, 2.5, 1.5, 0]  
[0, 0, 1.0, 0, 2.0, 3.0, 0, 0.5, 2.5, 1.5, 0]  
[0, 0, 1.0, 0, 2.0, 3.0, 0, 0.5, 2.5, 1.5, 0]    
...

我什至尝试过类似的东西

Matpreferences=[]  
    for i in range(10):  
    random.shuffle(vec)
    a=vec
    Matpreferences.append(a)   

但是它产生相同的结果。有什么简单的方法可以解决这个问题?
非常感谢您提供的任何帮助=)

python大神给出的解决方案

您需要先复制vec的副本,然后再对其进行洗牌:

import random
vec=[1,2,3,4,5]
for i in range(5):
    vec.append(10)
Matpreferences=[]
for i in range(10):
    v = vec[:]
    random.shuffle(v)
    Matpreferences.append(v)

说明

从您的代码:

a=vec
Matpreferences.append(a)  

在这里,a指向与vec指向相同的数据。因此,当a被改组时,vec也会被改写,指向vec的所有内容也会被改写。

相比之下,由于下标[:],此代码创建数据的新的独立副本:

v = vec[:]

因为v是单独的副本,所以对v进行改组对vec无效。