Python 3.x 当我没有';我不能把它编程为(奇怪的行为)?

Python 3.x 当我没有';我不能把它编程为(奇怪的行为)?,python-3.x,global-variables,Python 3.x,Global Variables,在我开始之前,我想说我找到了解决这个问题的方法,我只是想知道为什么会发生这种情况 好的,我会尽量简单地解释 我在写一个国际象棋游戏,我做的是创建了一个嵌套列表,其中第三个值要么是None类型,要么是一张图片的名称(例如“bq.png”),它附着在一块黑色的皇后上。别问我为什么这么做,这只是我下棋的方式 但为了让我把这个映射出来,我需要一个第三个值中包含所有None类型的列表,比如这样开始: PROTO_BOARD=[ [0,0,None], [39,0,None], [7

在我开始之前,我想说我找到了解决这个问题的方法,我只是想知道为什么会发生这种情况

好的,我会尽量简单地解释

我在写一个国际象棋游戏,我做的是创建了一个嵌套列表,其中第三个值要么是None类型,要么是一张图片的名称(例如“bq.png”),它附着在一块黑色的皇后上。别问我为什么这么做,这只是我下棋的方式

但为了让我把这个映射出来,我需要一个第三个值中包含所有None类型的列表,比如这样开始:

PROTO_BOARD=[
         [0,0,None],  [39,0,None],   [79,0,None], [119,0,None],    [159,0,None],   [199,0,None],   [239,0,None],   [279,0,None],
         [0,40,None], [39,40,None],  [79,40,None],[119,40,None],   [159,40,None],  [199,40,None],  [239,40,None],  [279,40,None],
         [0,80,None], [39,80,None],  [79,80,None], [119,80,None],  [159,80,None],  [199,80,None],  [239,80,None],  [279,80,None],
         [0,120,None],[39,120,None], [79,120,None],[119,120,None], [159,120,None], [199,120,None], [239,120,None], [279,120,None],
         [0,160,None],[39,160,None], [79,160,None],[119,160,None], [159,160,None], [199,160,None], [239,160,None], [279,160,None],
         [0,200,None],[39,200,None], [79,200,None],[119,200,None], [159,200,None], [199,200,None], [239,200,None], [279,200,None],
         [0,240,None],[39,240,None], [79,240,None],[119,240,None], [159,240,None], [199,240,None], [239,240,None], [279,240,None],
         [0,280,None],[39,280,None], [79,280,None],[119,280,None], [159,280,None], [199,280,None], [239,280,None], [279,280,None]

            ]
PROTO_BOARD是一个全局变量,有了它,我有了另一个全局变量current_BOARD,当我第一次创建它时它是空的。现在

global current_board,PROTO_BOARD,PICS
current_board=PROTO_BOARD


for piece in self.all_pieces:
  x=piece.rect.x
  y=piece.rect.y
  for i in current_board:
   if i[0]==x and i[1]==y:
     location_1=current_board.index(i)
     location_2=PICS.index(piece.picture)
     current_board[location_1][2]=PICS[location_2]
以上内容是不言自明的。如果图片与实际工件的x和y坐标匹配,则可以更改列表中的第三个元素(因此,如果在坐标(0,0)上有一辆黑色车,则当前_板中的第一个元素将变为0,0,“br.png”)。 但上面提到的主要问题是,PROTO_板将成为当前_板的样子,这意味着当它的所有第三个值都是Nones时,它可能会有类似“bq.png”的东西

现在,如果我这样做,我的代码工作正常:

current_board=[
         [0,0,None],  [39,0,None],   [79,0,None], [119,0,None],    [159,0,None],   [199,0,None],   [239,0,None],   [279,0,None],
         [0,40,None], [39,40,None],  [79,40,None],[119,40,None],   [159,40,None],  [199,40,None],  [239,40,None],  [279,40,None],
         [0,80,None], [39,80,None],  [79,80,None], [119,80,None],  [159,80,None],  [199,80,None],  [239,80,None],  [279,80,None],
         [0,120,None],[39,120,None], [79,120,None],[119,120,None], [159,120,None], [199,120,None], [239,120,None], [279,120,None],
         [0,160,None],[39,160,None], [79,160,None],[119,160,None], [159,160,None], [199,160,None], [239,160,None], [279,160,None],
         [0,200,None],[39,200,None], [79,200,None],[119,200,None], [159,200,None], [199,200,None], [239,200,None], [279,200,None],
         [0,240,None],[39,240,None], [79,240,None],[119,240,None], [159,240,None], [199,240,None], [239,240,None], [279,240,None],
         [0,280,None],[39,280,None], [79,280,None],[119,280,None], [159,280,None], [199,280,None], [239,280,None], [279,280,None]
    ]

但我认为让当前的电路板和PROTO_电路板相等会更容易,但这导致了PROTO_电路板的价值发生了变化。这和for循环有关,但我甚至连时间原型板都没有,所以为什么它的值会改变呢?这是某种bug吗?

在Python中对对象执行A=B时,不会复制。。。你做了一个“推荐人”

请参见此示例:

>>> a = [1,2,3]
>>> b = a
>>> b[1]=5
>>> a
[1, 5, 3]
>>> 

现在你明白发生了什么了吗?

当你在Python中使用对象时,你不会复制。。。你做了一个“推荐人”。