Python 中的参数传递、返回值、浅拷贝、深拷贝


Posted in Python onJune 25, 2019

1. Python 的参数传递

Python的参数传递,无法控制引用传递还是值传递。对于不可变对象(数字、字符、元组等)的参数,更类似值传递;对于可变对象(列表、字典等),更类似引用传递。

def fun1(n):
  print(n)  # n在没修改前,指向的地址和main函数中n指向的地址相同
  n = 20   # n在修改后,指向的地址发生改变,相当于新建了一个值为20的参数n
def fun2(l):
  print(l)  # l在没修改前,指向的地址和main函数中l指向的地址相同
  l = [5,6,7,8,9] # l在修改后,指向的地址和main函数中l指向的地址仍相同,此时main函数中l的值也会改变
if __name__=="__main__":
  n = 10
  l = [1,2,3,4,5]
  fun1(n)
  fun2(l)
  print(n)  # n的值还是10
  print(l)  # l的值在fun2()中已经被改变

2. Python 的返回值

Python的返回值,无法控制引用传递还是值传递。对于不可变对象(数字、字符、元组等)的参数,更类似值传递;对于可变对象(列表、字典等),更类似引用传递。

str1 = 'hi'
l1 = [1,2,3,4,5]
def fun1():
  return str1
def fun2():
  return l1
str2 = fun1() # 此时,str1 和 str2 的指向地址是相同的
str2 = 'hello' # 修改后,str2 指向的地址发生改变,相当于新建了一个值为`hello`的变量
l2 = fun2() # 此时,l1 和 l2 的指向地址是相同的
l2 = [6,7,8,9] # 修改后,l2 指向的地址仍相同,修改 l2 会影响到 l1

3. Python 的浅拷贝和深拷贝

对于不可变对象(数字、字符、元组等),直接赋值的结果和深拷贝一致;对于可变对象(列表、字典等),直接赋值、浅拷贝、深拷贝结果不同。

# 不可变对象(数字、字符、元组等)的例子
a = 100 
b = a
b = 30
print('a: ', a)
print('b: ', b)
# 结果:
# a = 100
# b = 30
# 可变对象(列表、字典等)的例子
import copy
dict1 = {1:1, 'user':'test', 'num':[1, 2, 3]}
dict2 = dict1 # 直接赋值,两个字典指向地址一致
dict3 = dict1.copy() # 浅拷贝,只拷贝到原对象
dict4 = copy.deepcopy(dict1) # 深拷贝,除了拷贝原对象,也会拷贝子对象
dict1[1] = 11
dict1['user'] = '123'
dict1['num'].remove(1)
print('原字典修改后:',dict1)
print('直接赋值:',dict2)
print('浅拷贝:',dict3)
print('深拷贝:',dict4)
# 结果
# 原字典修改后:{1:11,'user': '123', 'num': [2, 3]}
# 直接赋值:{1:11,'user': '123', 'num': [2, 3]}
# 浅拷贝:{1:1,'user': 'test', 'num': [2, 3]}
# 深拷贝:{1:1,'user': 'test', 'num': [1, 2, 3]}

总结

以上所述是小编给大家介绍的Python 中的参数传递、返回值、浅拷贝、深拷贝,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python中map()函数的使用方法示例
Sep 29 Python
python实现flappy bird小游戏
Dec 24 Python
对python修改xml文件的节点值方法详解
Dec 24 Python
pyqt 实现为长内容添加滑轮 scrollArea
Jun 19 Python
Python处理session的方法整理
Aug 29 Python
python 三元运算符使用解析
Sep 16 Python
python实现的按要求生成手机号功能示例
Oct 08 Python
Django REST框架创建一个简单的Api实例讲解
Nov 05 Python
python实现UDP协议下的文件传输
Mar 20 Python
15款Python编辑器的优缺点,别再问我“选什么编辑器”啦
Oct 19 Python
Python学习工具jupyter notebook安装及用法解析
Oct 23 Python
Django和Ueditor自定义存储上传文件的文件名
Feb 25 Python
pyqt5 删除layout中的所有widget方法
Jun 25 #Python
在Python中表示一个对象的方法
Jun 25 #Python
Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围
Jun 25 #Python
浅谈PyQt5 的帮助文档查找方法,可以查看每个类的方法
Jun 25 #Python
PyQt5根据控件Id获取控件对象的方法
Jun 25 #Python
PyQt5组件读取参数的实例
Jun 25 #Python
华为2019校招笔试题之处理字符串(python版)
Jun 25 #Python
You might like
DOMXML函数笔记
2006/10/09 PHP
smarty模板局部缓存方法使用示例
2014/06/17 PHP
php自定文件保存session的方法
2014/12/10 PHP
PHP实现连接设备、通讯和发送命令的方法
2015/10/13 PHP
Windows2003下php5.4安装配置教程(IIS)
2016/06/30 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
js宝典学习笔记(上)
2007/01/10 Javascript
JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件
2015/12/20 Javascript
JavaScript中用let语句声明作用域的用法讲解
2016/05/20 Javascript
AngularJS基础 ng-model 指令详解及示例代码
2016/08/02 Javascript
vuejs通过filterBy、orderBy实现搜索筛选、降序排序数据
2020/10/26 Javascript
关于axios返回空对象的问题解决
2017/04/04 Javascript
详解Vue.js 2.0 如何使用axios
2017/04/21 Javascript
PHP7新特性简述
2017/06/11 Javascript
vue修改vue项目运行端口号的方法
2017/08/04 Javascript
EasyUI框架 使用Ajax提交注册信息的实现代码
2017/09/27 Javascript
layui弹出层按钮提交iframe表单的方法
2018/08/20 Javascript
使用gulp构建前端自动化的方法示例
2018/12/25 Javascript
JavaScript内置对象之Array的使用小结
2020/05/12 Javascript
解决vue项目打包上服务器显示404错误,本地没出错的问题
2020/11/03 Javascript
[01:24:34]2014 DOTA2华西杯精英邀请赛5 24 DK VS LGD
2014/05/25 DOTA
[01:42:49]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第一场 2月26日
2021/03/11 DOTA
python sort、sorted高级排序技巧
2014/11/21 Python
深入讨论Python函数的参数的默认值所引发的问题的原因
2015/03/30 Python
解决python 输出是省略号的问题
2018/04/19 Python
在Python 字典中一键对应多个值的实例
2019/02/03 Python
Python在OpenCV里实现极坐标变换功能
2019/09/02 Python
python 动态绘制爱心的示例
2020/09/27 Python
CSS3 animation实现简易幻灯片轮播特效
2016/09/27 HTML / CSS
ReVive利维肤美国官网:RéVive Skincare
2018/04/18 全球购物
希腊品牌鞋类销售网站:epapoutsia.gr
2020/03/18 全球购物
办公室副主任岗位职责
2013/11/25 职场文书
高中生期末评语
2014/01/28 职场文书
运动会稿件100字
2014/02/21 职场文书
领导调研接待方案
2014/02/27 职场文书
Java 语言中Object 类和System 类详解
2021/07/07 Java/Android