Python通过引用将参数传递给构造函数

2024-04-23 23:29:59 发布

您现在位置:Python中文网/ 问答频道 /正文

import pandas as pd

class MyClass():
    def __init__(self, df):
        self.df = df

    def edit(self):
        self.df = self.df[~self.df['numbers'].isin([2,4,6,8,10])]

df = pd.DataFrame([1,2,3,4,5,6,7,8,9,10], columns=['numbers'])
obj = MyClass(df).edit()
print df

我希望print df打印在filteration函数之后重新分配的数据帧。在

但是这个stil打印edit函数修改它之前的数据帧。在

我的外部变量如何仍然跟踪发生在df内部类中的更改


Tags: 数据函数importselfpandasdfinitdef
3条回答

尝试将代码重写为:

df = pd.DataFrame([1,2,3,4,5,6,7,8,9,10], columns=['numbers'])
obj = MyClass(df)
obj.edit()
print obj.df

不可变对象不是通过引用传递的(从技术上讲,neither are mutable objects)。你想这么做有什么特别的原因吗?在

How can my outer variable still track the changes happend to the df inside class

你这样做的方式,也就是重新分配,这是不可能的。名字并没有“看到”其他名字的重新分配(想象一下如果他们看到的话会发生什么灾难)。在

在这里,不重新分配df的唯一机会是对数据帧进行变异。您当前所做的就是创建一个新对象并重新分配self.var。类之外的var并不关心这一点,仍然指向旧对象。在

当然,明智的做法是将df重新分配给某个函数或方法的返回值,即:

def compute_new_df_from_old_df(df):
    return df.foo()[bar]

df = <some dataframe>
df = compute_new_df_from_old_df(df)

相关问题 更多 >