Python的邻居都指向相同的值

Python的邻居都指向相同的值,python,pygame,Python,Pygame,我正在用Python制作一个扫雷舰克隆,我遇到了设置“邻居”的问题 这是一节课: class Box: hasBomb = False numBombNeighbors = 0 clicked = False xcoord = 0 ycoord = 0 neighbors = [None, None, None, None, None, None, None, None] def __init__(self): self.

我正在用Python制作一个扫雷舰克隆,我遇到了设置“邻居”的问题

这是一节课:

class Box:
    hasBomb = False
    numBombNeighbors = 0
    clicked = False
    xcoord = 0
    ycoord = 0
    neighbors = [None, None, None, None, None, None, None, None]

    def __init__(self):
        self.hasBomb = False
        self.numBombNeighbors = 0
        self.clicked = False
        self.xcoord = 0
        self.ycoord = 0
        for i in xrange(8):
            self.neighbors[i] = None
然后我做黑板

def getRandomBoard():
    # we will hide 50 random bombs
    result = []
    for i in xrange(BOARDWIDTH):
        result.append([])
        for j in xrange(BOARDHEIGHT):
            new_box = Box()
            new_box.xcoord = i
            new_box.ycoord = j
            result[i].append(new_box)


    # set all the neighbors
    result = setNeighbros(result)

    for i in range(BOARDWIDTH):
        for j in range(BOARDHEIGHT):
            print result[i][j].xcoord
            print result[0][0].neighbors[5].xcoord
这是设置邻居的函数:

def setNeighbros(board):
    for i in range(len(board)):
        for j in range(len(board[i])-1):
            if j > 0:
                board[i][j].neighbors[0] = board[i][j-1]
            if j > 0 and i < len(board) -1:
                board[i][j].neighbors[1] = board[i+1][j-1]
            if i < len(board) - 1:
                board[i][j].neighbors[2] = board[i+1][j]
            if i < len(board) - 1 and j < len(board[i]) - 1:
                board[i][j].neighbors[3] = board[i+1][j+1]
            if j < len(board[i]) - 1:
                board[i][j].neighbors[4] = board[i][j+1]
            if j < len(board[i]) - 1 and i > 0:
                board[i][j].neighbors[5] = board[i-1][j+1]
            if i >  0:
                board[i][j].neighbors[6] = board[i-1][j]
            if i > 0 and j > 0:
                board[i][j].neighbors[7] = board[i-1][j-1]
    return board
def setNeighbros(电路板): 对于范围内的i(len(board)): 对于范围内的j(len(板[i])-1): 如果j>0: 板[i][j]。邻居[0]=板[i][j-1] 如果j>0且i0: 董事会[i][j]。邻居[5]=董事会[i-1][j+1] 如果i>0: 董事会[i][j]。邻居[6]=董事会[i-1][j] 如果i>0且j>0: 董事会[i][j]。邻居[7]=董事会[i-1][j-1] 返回板
在Board making函数中,我打印xcoord和邻居5的xcoord来检查问题,问题来自设置邻居。在创建邻居的过程中,它们都指向正确的邻居,但在创建完成后,它们都指向同一个邻居,但我知道盒子数组都包含不同的盒子,因为它们有不同的xcoord。如果有人能告诉我为什么所有的邻居都指向同一个框,我将不胜感激。

问题是类级别的变量在类的所有实例之间共享

如果您来自像
Java
这样的语言,您可以想象在类中声明的变量都是
static
变量

修改类以删除所有类级变量,并在
\uuuu init\uuuu
中执行实例级变量的所有初始化

class Box:

    def __init__(self):
        self.hasBomb = False
        self.numBombNeighbors = 0
        self.clicked = False
        self.xcoord = 0
        self.ycoord = 0
        self.neighbors = [None for i in xrange(8)]