实例和类属性的值变为共享

时间:2017-05-02 20:04:40

标签: python python-3.x

我不明白我的以下代码是如何表现的。我在初始化时将实例变量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的副本,但我不相信它应该存在。我问为什么实例和类变量得到了一个共享值,而那个问题询问如何创建一个实例变量。

0 个答案:

没有答案