Python中按引用传递的数据结构谨慎复制操作
来源:互联网 发布:gs算法的matlab代码 编辑:程序博客网 时间:2024/06/04 20:08
函数中对参数没有进行全部复制
python测试代码
import numpy as npimport pandas as pddef local(data): data.loc['a','a1']=100 print('局部函数中变量修改后的结果') print(data)def process(): rows=['a','b','c'] cols=['a1','b2','c3'] data=pd.DataFrame(np.arange(9).reshape((3,3)),index=rows,columns=cols) print(data) local(data) print('局部函数中的变量只有局部的修改动作,修改后仍然是传入变量的引用') print(data)if __name__=='__main__': process()
输出结果如下:
a1 b2 c3a 0 1 2b 3 4 5c 6 7 8局部函数中变量修改后的结果 a1 b2 c3a 100 1 2b 3 4 5c 6 7 8局部函数中的变量只有局部的修改动作,修改后仍然是传入变量的引用 a1 b2 c3a 100 1 2b 3 4 5c 6 7 8
结论:
类似于local函数中的那种只改变DataFrame中的局部数据,而不进行复制操作,类似于变量名[索引]=XXX 则DataFrame是按引用传递,在local函数中的任何修改都会在变量传入所在的函数中反应出来。
函数中对参数进行全部复制
Python代码如下:
import numpy as npimport pandas as pddef copy(data): data=data.drop(['a1'],axis=1) print('局部函数中变量复制后的结果') print(data)def process(): rows=['a','b','c'] cols=['a1','b2','c3'] data=pd.DataFrame(np.arange(9).reshape((3,3)),index=rows,columns=cols) print(data) copy(data) print('局部函数中的变量重新复制了一份,复制后的变量不再是传入变量的引用') print(data)if __name__=='__main__': process()
运行结果:
a1 b2 c3a 0 1 2b 3 4 5c 6 7 8局部函数中变量复制后的结果 b2 c3a 1 2b 4 5c 7 8局部函数中的变量重新复制了一份,复制后的变量不再是传入变量的引用 a1 b2 c3a 0 1 2b 3 4 5c 6 7 8
结论:
如果传入的DataFram变量在局部函数中存在类似于 变量名=XXX 的代码,则传入的变量产生的复制操作,复制后的变量不在是传入变量的引用。
总结
Python中大多数数据结构是按引用传递的,在传递过程中谨慎使用 变量名=XXX 这样的复制操作,这将导致按引用传递的目的无法达到。当然可以通过返回值的方式达到同样的目的。当然,类似于内置类型、元组、字符串等按值传递的数据结构不存在这个问题,要想获得修改后的结果必须使用返回值的方式。
阅读全文
0 0
- Python中按引用传递的数据结构谨慎复制操作
- Python中字典的复制和引用
- 【Python基本知识】 Python中,函数参数的引用和复制
- 引用数据类型中引用传递的本质---地址的复制,对象只有一个
- Python中变量传递时的引用和赋值
- Python中变量赋值传递时的引用和拷贝
- python参数的引用传递
- python 的值传递和引用传递
- Python中引用复制、分片复制、完整复制
- python按引用传递参数
- 按引用传递的
- 数据结构 第三讲--参数的值传递与引用传递
- Java:理解Java中函数参数传递的【按值传递】和【按引用传递】
- java一定要谨慎的操作!
- Python的函数参数传递:传值?引用?
- Python的函数参数传递:传值?引用?
- Python的函数参数传递:传值?引用?
- Python的函数参数传递:传值?引用?
- 深入了解AI--人工智能!读这篇文章就对了
- Cobbler部署指南之yum仓库配置管理篇
- sql语句作为字段保存到mysql数据库中无法通过的问题
- 主键和唯一索引的区别
- Docker入门介绍
- Python中按引用传递的数据结构谨慎复制操作
- jBox 全局设置
- JSP页面中Input输入框获取当前系统时间
- 初窥Linux 之 我最常用的20条命令
- Cobbler部署指南之Cobbler安装操作系统篇
- 矩阵构造
- Fragment 缓存
- 17年9月份总结
- 文章标题 netfilter的hook函数