我对在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']
答案 0 :(得分:0)
这是因为self.data
和data
都指向同一个对象。
如果您想要list
的深层副本,那么
def __init__(self, data_raw):
self.data = data_raw.copy()
self.data['new_column'] = 1