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中几个常用的类方法
Apr 08 Python
Python中SOAP项目的介绍及其在web开发中的应用
Apr 14 Python
python中Apriori算法实现讲解
Dec 10 Python
python实现字符串中字符分类及个数统计
Sep 28 Python
用python一行代码得到数组中某个元素的个数方法
Jan 28 Python
python程序运行进程、使用时间、剩余时间显示功能的实现代码
Jul 11 Python
python内存监控工具memory_profiler和guppy的用法详解
Jul 29 Python
Python socket连接中的粘包、精确传输问题实例分析
Mar 24 Python
使用Python文件读写,自定义分隔符(custom delimiter)
Jul 05 Python
Python3爬虫中关于Ajax分析方法的总结
Jul 10 Python
python爬虫之爬取笔趣阁小说
Apr 22 Python
Python Flask请求扩展与中间件相关知识总结
Jun 11 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
杏林同学录(三)
2006/10/09 PHP
PHP实现文件下载详解
2014/11/27 PHP
Yii2设置默认控制器的两种方法
2017/05/19 PHP
PHP 断点续传实例详解
2017/11/11 PHP
Laravel框架分页实现方法分析
2018/06/12 PHP
PHP中十六进制颜色与RGB颜色值互转的方法
2019/03/18 PHP
jquery ajax学习笔记2 使用XMLHttpRequest对象的responseXML
2011/10/16 Javascript
jquery中获取元素里某一特定子元素的代码
2014/12/02 Javascript
JavaScript中的console.trace()函数介绍
2014/12/29 Javascript
Vue.js绑定HTML class数组语法错误的原因分析
2016/10/19 Javascript
js+div+css下拉导航菜单完整代码分享
2016/12/28 Javascript
vue项目中仿element-ui弹框效果的实例代码
2019/04/22 Javascript
Vue中的循环及修改差值表达式的方法
2019/08/29 Javascript
js实现秒表计时器
2019/12/16 Javascript
在Webpack中用url-loader处理图片和字体的问题
2020/04/28 Javascript
python出现"IndentationError: unexpected indent"错误解决办法
2017/10/15 Python
HTML5 Canvas渐进填充与透明实现图像的Mask效果
2013/07/11 HTML / CSS
前端使用canvas生成盲水印的加密解密的实现
2020/12/16 HTML / CSS
美国中小型企业领先的办公家具供应商:Office Designs
2016/11/26 全球购物
瑞典时尚服装购物网站:Miinto.se
2017/10/30 全球购物
荷兰电脑专场:Paradigit
2018/05/05 全球购物
戴尔新西兰官网:Dell New Zealand
2020/01/07 全球购物
亚洲在线旅行门户网站:Expedia.com.hk(智游网)
2020/04/14 全球购物
澳大利亚商务邀请函
2014/01/17 职场文书
2014年元旦感言
2014/03/06 职场文书
四风自我剖析材料
2014/09/30 职场文书
合同权益转让协议书模板
2014/11/18 职场文书
计算机专业自荐信
2015/03/05 职场文书
个人简历求职信范文
2015/03/20 职场文书
幼儿园亲子活动通知
2015/04/24 职场文书
杨善洲观后感
2015/06/04 职场文书
解决goland 导入项目后import里的包报红问题
2021/05/06 Golang
Redis数据结构之链表与字典的使用
2021/05/11 Redis
elementui的el-popover修改样式不生效的解决
2021/06/30 Javascript
Java反应式框架Reactor中的Mono和Flux
2021/07/25 Java/Android
vmware虚拟机打不开vmx文件怎么办 ?vmware虚拟机vmx文件打开方法
2022/04/08 数码科技