Это то, что я ожидаю от класса Python.У меня есть переменная num
с определенным значением.Экземпляр класса x
сначала вызывает его, затем класс меняет свое значение self.num
на функцию add_one
.num
сохраняет свое первоначальное значение.
class Test_Class:
def __init__(self, num):
self.num = num
def show(self):
return self.num
def add_one(self):
self.num = self.num+1
num = 50
x = Test_Class(num)
x.add_one()
print (x.show())
print (num)
# Output
# 51
# 50
Но по какой-то странной причине я использовал ту же логику с фреймом данных Pandas, но, как будто obj.df
напрямую ссылается на исходный df_test
, поэтому, когда я изменил obj_df
через add_new_col
, он также изменит df_test
.Я хочу, чтобы df_test
не добавлял NEW_COL
.
df_test = pd.DataFrame({'Col1':[1, 2, 3, 4, 5], 'Col2':[3, 4, 5, 6, 7]})
class Test_Class:
def __init__(self, df):
self.df = df
def add_new_col(self, df, column_name): # this function requires a df as parameter
df[column_name] = 100
obj = Test_Class(df_test)
obj.add_new_col(obj.df, 'NEW_COL')
print (obj.df)
print (df_test)
# Output
Col1 Col2 NEW_COL
0 1 3 100
1 2 4 100
2 3 5 100
3 4 6 100
4 5 7 100
Col1 Col2 NEW_COL
0 1 3 100
1 2 4 100
2 3 5 100
3 4 6 100
4 5 7 100