Python 无意中打乱数组

Python Shuffling Array Inadvertently

我正在尝试在 Python 中进行简单的一维数组随机播放,但保留原始数组的副本。但是,当调用随机播放命令(np.random.shuffle 或 random.shuffle)时,Python 将同步播放所有命令。

示例:

import numpy as np
arr = np.arange(10)
arr_backup = arr
print(arr)
print(arr_backup)
np.random.shuffle(arr)
print(arr)
print(arr_backup)

这会打印:

[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]
[1 4 9 5 8 6 3 2 7 0]
[1 4 9 5 8 6 3 2 7 0]

我想我不明白 Python 是如何在命名空间中分配此项的。任何帮助表示赞赏。 谢谢

np 文档的直接参考。

x = np.array([1, 2, 3])

y = x

z = np.copy(x)

请注意,当我们修改 x 时,y 会发生变化,但 z 不会:

x[0] = 10

x[0] == y[0] True

x[0] == z[0] False

Python 中的所有变量都包含对对象的引用。从一个变量到另一个变量的赋值只是复制该引用,因此 arrarr_backup 都指向内存中的同一个对象。

Shuffle 就地改变数组,因此当您从两个引用访问对象时,更改会反映出来。为避免这种情况,您可以使用 arr_backup = arr[:]arr_backup = arr.copy()

复制数组