在“if”语句中声明变量会导致问题

2024-06-06 05:51:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图在Python3中创建一个rubic多维数据集。我现在正在制作flip函数

def flip(topSide, frontSide, row, column, direction):
if (direction == "right"):
    if (topSide == 1):

       if (frontSide == 2):
           a = cube[1][row - 1][:]
           cube[1][row-1][:] = cube[2][row-1][:]
           cube[2][row - 1][:] = cube[3][row - 1][:]
           cube[3][row - 1][:] = cube[4][row - 1][:]
           cube[4][row - 1][:] = a
           print(a)

我将这些面定义为数字。这是:

green = 1
red = 2
yellow = 3
orange = 4
white = 5
blue = 6

当我删除cube[1][row-1][:] = cube[2][row-1][:]行时,a[2,2,2]。但是如果我不删除那行a就是[3,3,3]。在更改a变量之前,我定义了它,但它仍然会更改。有没有办法将变量a定义为它应该是什么

如果你不明白我的问题,尽管问吧


Tags: 数据函数if定义defcolumnpython3row
1条回答
网友
1楼 · 发布于 2024-06-06 05:51:51

让我来给大家演示一下:

import numpy as np
cube = np.random.randint(1, 7, size=(3, 3, 3))

"""
cube is
array([[[1, 4, 2],
        [5, 6, 3],
        [3, 1, 1]],

       [[2, 2, 1],
        [5, 1, 2],
        [5, 1, 3]],

       [[3, 2, 2],
        [4, 2, 2],
        [5, 6, 2]]])
"""

row = 1
a = cube[1][row - 1][:]
print(a) #  outputs: array([2, 2, 1])

cube[1][row-1][:] = [10, 10, 10]
print(a)  # outputs: array([10, 10, 10])

这种行为是因为在运行a = cube[1][row - 1][:]时,cube[1][row - 1][:]的引用被分配给变量a。引用意味着,你知道,内存中的地址。因此,如果cube[1][row-1][:]被改变,那么a也会改变。因为它们在内存中引用相同的地址

您需要分配它的值,而不是地址。解决方案之一是使用^{}

a = np.copy(cube[1][row - 1][:])
print(a)  # outputs: array([2, 2, 1])

cube[1][row-1][:] = [10, 10, 10]
print(a)  #  still outputs: array([2, 2, 1])

相关问题 更多 >