Python - 两个 类 的变量被链接
Python - Two Classes's Variables Are Linked
我在我制作的东西中注意到了这个问题,并设法以更简单的形式重现它。
问题是我有两个玩家 - 都是一个人 class - 他们每个人都有自己的网格。我从一个全局网格变量开始,并将每个人的网格分配给该全局变量。但是,当我改变一个人的网格时,另一个人的网格也会改变!
这是代码和输出:
有人对为什么会发生这种情况有任何建议吗?
编辑:
我尝试了 list() 建议。这在一个程序中有效,但在我的主程序中它没有做任何事情。
Players[1].Grid = list(Grid)
Players[0].Grid = list(Grid)
当我更改列表时,这会输出相同的内容。
您正在两个对象之间共享网格,因此当您更改它时,它们都会看到它。如果您希望每个人都有一份,请使用 list() 制作一份副本。
People[a].grid = list(Grid)
尽管 Scovetta 的回答确实适用于我提供的示例,但我发现问题的代码实际上使用了二维列表,而不是示例中的一维列表。
我从here中发现更复杂的对象需要
copy.deepcopy
复制所有内容,而不仅仅是对旧变量的引用。
我在我制作的东西中注意到了这个问题,并设法以更简单的形式重现它。
问题是我有两个玩家 - 都是一个人 class - 他们每个人都有自己的网格。我从一个全局网格变量开始,并将每个人的网格分配给该全局变量。但是,当我改变一个人的网格时,另一个人的网格也会改变!
这是代码和输出:
有人对为什么会发生这种情况有任何建议吗?
编辑:
我尝试了 list() 建议。这在一个程序中有效,但在我的主程序中它没有做任何事情。
Players[1].Grid = list(Grid)
Players[0].Grid = list(Grid)
当我更改列表时,这会输出相同的内容。
您正在两个对象之间共享网格,因此当您更改它时,它们都会看到它。如果您希望每个人都有一份,请使用 list() 制作一份副本。
People[a].grid = list(Grid)
尽管 Scovetta 的回答确实适用于我提供的示例,但我发现问题的代码实际上使用了二维列表,而不是示例中的一维列表。
我从here中发现更复杂的对象需要
copy.deepcopy
复制所有内容,而不仅仅是对旧变量的引用。