Python中拷贝和引用的实际应用的启发
我最近在敲代码时遇到了这样一种情况,需要在两个函数使用一个共同的动态数据,两个函数都会这个数据进行操作,但希望这两个都不要直接影响这个源数据,干扰彼此。
于是我想通过创建中间变量 df 然后再另外再两个函数中将 df 的值分别赋予 df_x 和 df_y,这样便都做到了不直接操作原数据,具体代码如下:
def view_Benefits():
global df_x
df_x = df.copy()
# 以下就是对 df_y 的操作
def Recharge_times():
global df_y
df_y = df.copy()
# 以下就是对 df_y 的操作
if __name__ == '__main__':
# 定义公共变量
df = []
但是我发现在实际的操作中出现了修改 df_y 的操作同时也修改了 df,便引出了今天的主题:
在 Python 中,直接的赋值采用的是引用方式,这种时候 df 和 df_y 其实就是一个变量,并没有在内存中产生新的变量空间。
在这种情况下应当使用拷贝来实现,拷贝会产生一个新的变量在内存中,也就是意味着修改 df_y 的同时不会影响 df,正确的写法如下:
def view_Benefits():
df_x = df.copy()
# 以下就是对 df_y 的操作
def Recharge_times():
df_y = df.copy()
# 以下就是对 df_y 的操作
if __name__ == '__main__':
# 定义公共变量
df = []
对列表、字典等类型变量使用 .copy() 函数便能够实现拷贝