5

我对 Python 还很陌生,所以我对语法和事情的确切工作方式并不是非常熟悉。我可能会误解,但从我的代码中可以看出这一行:

largeBoard = [[Board() for i in range(3)] for j in range(3)] 

正在创建对同一 Board 对象的 9 个引用,而不是 9 个不同的 Board 对象。如何创建 9 个不同的 Board 对象?

当我运行时:

largeBoard = [[Board() for i in range(3)] for j in range(3)]        
x_or_o = 'x'      
largeBoard[1][0].board[0][0] = 'g' # each Board has a board inside that is a list 
for i in range(3):
    for j in range(3):
        for k in range(3):
            for l in range(3):
                print largeBoard[i][j].board[k][l]

我得到了多个“g”,这让我认为它们都是对同一个对象的引用。

4

2 回答 2

4

你把它颠倒过来了:你那里创建了 9 个独立的Board实例。如果你有类似的东西

largeBoard = [[Board()] * 3] * 3

那么您将只有一个实例。这是许多 Python 新手常犯的错误的根源。

[X for i in range(3)]每次评估X一次i(此处为 3 次),而仅[X] * 3评估X一次。

于 2013-07-31T14:53:56.587 回答
1

我猜这是您的 Board 类(我能够使用它重现您的错误):

class Board:
    board = [[0 for x in range(3)] for x in range(3)]

要解决此问题,您需要创建一个__init__()函数来初始化您的板,以便每个实例都有自己的板:

class Board:
    def __init__(self):
        self.board = [[0 for x in range(3)] for x in range(3)]

那么你应该只看到一个“g”。 这是 ideone 中比较类的代码。

于 2013-07-31T15:18:41.713 回答