在与另一个列表关联的列表上使用 shuffle 方法将它们都洗牌?

Using shuffle method on list associated to another list shuffles them both?

这是我的代码

import random

#Creating a list
li1=[1,2,3,4,5,6,7,8,9]

#Creating a copy of li1 to li2
li2=li1

random.shuffle(li1)

print (li2)

这也会随机播放 li2,为什么?有没有办法独立洗牌?

我该如何解决这个问题?非常感谢!

当您执行 li2 = li1 时,您存储的不是 li1 的副本,而是 li1 列表对 li2 的引用。

为了将 li1 的副本存储到 li2,执行:

li2 = l1[:]

# OR, via functional approach 
# li2 = list(li1)

或者,您可以使用 copy.copy() 作为:

import copy
li2 = copy.copy(li1)

示例示例:

>>> import random
>>> li1 = [1,2,3,4,5,6,7,8,9]
>>> li2 = li1[:]  # creating copy

# shuffling li1
>>> random.shuffle(li1)

>>> li1    # Shuffled content li1
[2, 1, 8, 6, 5, 4, 3, 9, 7]
>>> li2    # li2 holds the original copy
[1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> random.shuffle(li2)   # also shuffle li2
>>> li2
[1, 5, 8, 9, 7, 2, 4, 6, 3]
>>> li1
[2, 1, 8, 6, 5, 4, 3, 9, 7]

li1=li2之后,li1li2都指向同一个列表[1,2,3,4,5,6,7,8,9]。并且 random.shuffle 将列表 替换为 和 returns None。从下面的代码片段可以很容易看出。

import random

li1 = [1,2,3,4,5,6,7,8,9]
li2 = random.shuffle(li1)

print(li1)  # [4, 9, 8, 6, 2, 5, 7, 1, 3]
print(li2)  # None

使用random.sample不替换,如下图

import random

li1 = [1,2,3,4,5,6,7,8,9]
li2 = random.sample(li1, len(li1))

print(li1)  # [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(li2)  # [4, 6, 2, 1, 7, 5, 8, 3, 9]