python类属性范围 - 泄漏到全局范围

时间:2017-04-19 04:31:31

标签: python oop scope

我对在python中为类属性赋予参数时看到的一些行为感到非常惊讶。也许有人可以启发我,并帮助我阻止它发生。

基本上,我对类方法中的class属性所做的更改将被复制到作为参数传递给类 init 的全局变量中。

是否存在一种内置的方法来阻止这种行为,因为在很多情况下它可能会破坏数据变量以供其他用途使用。

以下是代码的基本版本

class BasicClass:

    def __init__(self, data_raw):
        self.data = data_raw
        self.data['new_column'] = 1

# Now outside the class

data = pd.read_csv(...)

data.columns
Out[1]: ['orig_column']

obj = BasicClass(data)

data.columns
Out[2]: ['orig_column','new_column']

1 个答案:

答案 0 :(得分:0)

这是因为self.datadata都指向同一个对象。

如果您想要list的深层副本,那么

def __init__(self, data_raw):
    self.data = data_raw.copy()
    self.data['new_column'] = 1

请参考:How to clone or copy a list?