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下rrdtool模块的基本使用方法
Nov 13 Python
Django中Model的使用方法教程
Mar 07 Python
Python查看微信撤回消息代码
Jun 07 Python
python使用多进程的实例详解
Sep 19 Python
Python3安装pip工具的详细步骤
Oct 14 Python
Python3实现配置文件差异对比脚本
Nov 18 Python
python 求10个数的平均数实例
Dec 16 Python
关于tf.TFRecordReader()函数的用法解析
Feb 17 Python
python解析xml文件方式(解析、更新、写入)
Mar 05 Python
Python异常处理机制结构实例解析
Jul 23 Python
Python如何截图保存的三种方法(小结)
Sep 01 Python
Numpy中np.max的用法及np.maximum区别
Nov 27 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
用PHP中的 == 运算符进行字符串比较
2006/11/26 PHP
php删除指定目录的方法
2015/04/03 PHP
PHP判断上传文件类型的解决办法
2015/10/20 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
function, new function, new Function之间的区别
2007/03/08 Javascript
理解 JavaScript 预解析
2009/10/25 Javascript
JavaScript 三种不同位置代码的写法
2009/10/25 Javascript
ExtJS的FieldSet的column列布局
2009/11/20 Javascript
javascript动态改变img的src属性图片不显示的解决方法
2010/10/20 Javascript
css如何让浮动元素水平居中
2015/08/07 Javascript
javascript引用类型之时间Date和数组Array
2015/08/27 Javascript
window.onerror()的用法与实例分析
2016/01/27 Javascript
Bootstrap CSS组件之导航条(navbar)
2016/12/17 Javascript
基于Webpack4和React hooks搭建项目的方法
2019/02/05 Javascript
开发中常用的25个JavaScript单行代码(小结)
2019/06/28 Javascript
vue实现虚拟列表功能的代码
2020/07/28 Javascript
[54:29]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第二场
2018/04/09 DOTA
[46:23]OG vs EG 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
ptyhon实现sitemap生成示例
2014/03/30 Python
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
2019/01/29 Python
python同时替换多个字符串方法示例
2019/09/17 Python
解决jupyter notebook import error但是命令提示符import正常的问题
2020/04/15 Python
使用python matplotlib 画图导入到word中如何保证分辨率
2020/04/16 Python
Python同时处理多个异常的方法
2020/07/28 Python
Scrapy 配置动态代理IP的实现
2020/09/28 Python
Html5让容器充满屏幕高度或自适应剩余高度的布局实现
2020/05/14 HTML / CSS
接口可以包含哪些成员
2012/09/30 面试题
元旦促销方案
2014/03/15 职场文书
个人贷款承诺书
2014/03/28 职场文书
企业家王石演讲稿:坚持与放下
2014/04/27 职场文书
高二学年自我鉴定范文(2篇)
2014/09/26 职场文书
2015年结对帮扶工作总结
2015/05/04 职场文书
狂人日记读书笔记
2015/06/30 职场文书
《狼牙山五壮士》读后感:宁死不屈,视死如归
2019/08/16 职场文书
教你如何使用Python实现二叉树结构及三种遍历
2021/06/18 Python
默认网关不可用修复后过一会又不好使了解决方法
2022/04/08 数码科技