我不明白我的以下代码是如何表现的。我在初始化时将实例变量cards_left
设置为等于对象变量cards_start
,但是每当我修改实例变量时,它也会修改类变量。
我发现了一些与此类似的好问题,但它们与使用__init__
参数中的默认值有关。我无法理解的是为什么我的实例变量值与我在__init__
之外定义的类变量共享。什么是避免这种情况的正确方法?
class Deck(object):
cards_start = [1, 2, 3, 4]
def __init__(self):
self.cards_left = Deck.cards_start
def change(self):
self.cards_left.pop()
x = Deck()
y = Deck()
x.change()
#all the below will print '[1, 2, 3]'
print('class cards start:', Deck.cards_start)
print('x cards start:', x.cards_start)
print('x cards left:', x.cards_left)
print('y cards start:', y.cards_start)
print('y cards left:', y.cards_left)
修改 这个问题被标记为this one的副本,但我不相信它应该存在。我问为什么实例和类变量得到了一个共享值,而那个问题询问如何创建一个实例变量。