gpt4 book ai didi

python - 为什么我的不同实例变量在 python 中链接在一起

转载 作者:太空宇宙 更新时间:2023-11-04 08:09:28 25 4
gpt4 key购买 nike

我是 python 的新手,所以我做了一些挖掘,根据我的理解,一个类的成员变量将在该类的所有实例中更新,无论您用哪个实例修改它。但是,实例变量似乎不会发生同样的情况,但是当我运行这段代码时......

class Game(object):

def__init__(self, active_turn, board):
self.active_turn = active_turn
self.board = board


game = Game(1,[1,0,0,0,0,0,0,0,0])

move = 3

print(game.board, "\n")

possible_game = Game(game.active_turn*-1,game.board)

print(game.board)
print(possible_game.board, "\n")

possible_game.board[move] = possible_game.active_turn

print(game.board)
print(possible_game.board, "\n")

game.board[move+1] = game.active_turn

print(game.board)
print(possible_game.board)

我得到这个输出...

[1, 0, 0, 0, 0, 0, 0, 0, 0] 

[1, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 0, 0, 0, 0, 0, 0, 0, 0]

[1, 0, 0, -1, 0, 0, 0, 0, 0]
[1, 0, 0, -1, 0, 0, 0, 0, 0]

[1, 0, 0, -1, 1, 0, 0, 0, 0]
[1, 0, 0, -1, 1, 0, 0, 0, 0]

board 变量在 Game 类的每个实例中更新,即使我只在其中一个实例中更改它。有谁知道为什么会发生这种情况以及我可以做些什么来避免这种情况?

谢谢,尼克

最佳答案

使用copy

>>> a = [1,2,3]
>>> from copy import copy
>>> b = copy(a)
>>> b
[1, 2, 3]
>>> b[1] = 5
>>> b
[1, 5, 3]
>>> a
[1, 2, 3]
>>>

编辑

要真正了解引擎盖下的内容,您应该了解 Python DataModel .官方文档很容易理解。

简而言之,list在Python中是mutable类型,也就是说如果你将一个list对象赋值给多个变量,它们实际上指向的是同一个list对象,因此改变其中之一会影响其他人。

另一方面,string, int, tuple, ... 是immutable 数据类型。
如果您分配 a=1 那么 a=212 是不同的 int 对象,即 1 不会变成2,因为int是不可变的,它们不能被修改。

关于python - 为什么我的不同实例变量在 python 中链接在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25355634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com