Python中引用同一对象的对象列表

2024-09-30 04:34:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python还比较陌生,所以我对Python的语法和工作方式并不十分熟悉。我可能误解了,但从我的代码中可以看出这一行:

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

正在创建9个对同一个板对象的引用,而不是9个不同的板对象。如何创建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”,这就是为什么我认为它们都是对同一个对象的引用。你知道吗


Tags: or对象代码inboardfor方式语法
2条回答

相反:您在那里创建9个独立的Board实例。如果你有

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

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

[X for i in range(3)]对每个i计算X一次(这里是3次),而[X] * 3只计算X一次。你知道吗

我猜这是你的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.

相关问题 更多 >

    热门问题