关于python的内存分配

时间:2016-01-22 04:59:38

标签: python memory-management

我运行以下python代码。

class A():
    def __init__(self,l=[]):
        self.k = l
    a = A()
    b = A()
    a.k.append(5)
    print id(a.k) == id(b.k)
    print b.k

结果是:

True
[5]

我不知道为什么 a.k和b.k拥有相同的内存地址。

1 个答案:

答案 0 :(得分:2)

因为当 defined功能时,您} 创建了<{1>}的空列表,而不是每次都函数被调用。

因此,两个类的l将指向相同的列表,因此更改一个将更改另一个(或者更准确地说,更改一个将更改仅一个)。

如果您想确保该类的每个对象都获得其拥有的列表,只需使用切片方法:

l