在python上创建一个解决Rubik多维数据集的程序时,我编写了一些代码来翻转魔方的正面:
c_top = top
c_front = front
c_left = left
c_right = right
c_back = back
c_bottom = bottom
for x in range(6,9):
right[x] = c_bottom[x]
top[x] = c_right[x]
left[x] = c_top[x]
bottom[x] = c_left[x]
出于某种原因,它做了一些奇怪的事情,改变了c_bottom和其他c_事情,即使我只运行了代码所在的函数。有谁知道为什么?
答案 0 :(得分:1)
因为c_bottom
和bottom
都是引用同一对象的变量。这意味着c_bottom[x]
与bottom[x]
中x
的{{1}}相同。
因此,当您执行range(0, len(bottom))
时,bottom[x] = c_left[x]
也会被修改。
简化示例:
c_bottom[x]
编辑:要解决此问题,您可以:
a)使a = ['Hello', 0, 0]
b = a
print(a[0]) # <<< Hello
b[0] = 'Goodbye'
print(a[0]) # <<< Goodbye
成为副本的副本。例如,如果他们列出了,那么你可以
c_side
b)但是,如果您只希望那些c_bottom = list(bottom)
变量执行该循环,则可以避免使用以下内容进行复制:
c_side