我是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',这让我觉得它们都是对同一个对象的引用。
答案 0 :(得分:4)
你反过来了:你 在那里创建了9个独立的Board
个实例。如果你有像
largeBoard = [[Board()] * 3] * 3
然后你只有一个实例。这是许多Python新手所犯的常见错误的根源。
[X for i in range(3)]
为每个X
评估i
一次(此处为3次),而[X] * 3
仅评估X
一次。
答案 1 :(得分: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”。 Here is the code in ideone that compares the classes.