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编程中的文件操作攻略
Oct 16 Python
Python数据分析之如何利用pandas查询数据示例代码
Sep 01 Python
Python3实现的回文数判断及罗马数字转整数算法示例
Mar 27 Python
Python 3.8新特征之asyncio REPL
May 28 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
Aug 02 Python
Python 可变类型和不可变类型及引用过程解析
Sep 27 Python
Python 根据数据模板创建shapefile的实现
Nov 26 Python
计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
Jan 15 Python
python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案
Feb 18 Python
在python中logger setlevel没有生效的解决
Feb 21 Python
使用python实现时间序列白噪声检验方式
Jun 03 Python
Python Excel vlookup函数实现过程解析
Jun 22 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/10/09 PHP
在WordPress中实现发送http请求的相关函数解析
2015/12/29 PHP
Yii框架表单提交验证功能分析
2017/01/07 PHP
js 剪切板的用法(clipboardData.setData)与js match函数介绍
2013/11/19 Javascript
JS 获取浏览器和屏幕宽高等信息代码
2014/03/31 Javascript
jQuery淡入淡出元素让其效果更为生动
2014/09/01 Javascript
JavaScript黑洞数字之运算路线查找算法(递归算法)实例
2016/01/28 Javascript
JS+HTML5实现的前端购物车功能插件实例【附demo源码下载】
2016/10/17 Javascript
动态Axios的配置步骤详解
2018/01/12 Javascript
使用vue重构资讯页面的实例代码解析
2019/11/26 Javascript
[01:56]林书豪DOTA2上海特级锦标赛励志短片
2016/03/05 DOTA
Python标准库inspect的具体使用方法
2017/12/06 Python
Python3自动签到 定时任务 判断节假日的实例
2018/11/13 Python
详解django实现自定义manage命令的扩展
2019/08/13 Python
用python画一只可爱的皮卡丘实例
2019/11/21 Python
Python3 中作为一等对象的函数解析
2019/12/11 Python
Python模块 _winreg操作注册表
2020/02/05 Python
python中time包实例详解
2021/02/02 Python
让IE6、IE7、IE8支持CSS3的脚本
2010/07/20 HTML / CSS
土耳其时尚购物网站:Morhipo
2017/09/04 全球购物
End Clothing美国站:英国男士潮牌商城
2018/04/20 全球购物
英国高街电视:High Street TV
2018/05/22 全球购物
Ramy Brook官网:美国现代女装品牌
2019/06/18 全球购物
shell程序中如何注释
2012/01/28 面试题
销售自我评价
2013/10/22 职场文书
资产经营总监岗位职责
2013/12/04 职场文书
工商治理实习生的自我评价
2014/01/15 职场文书
《花的勇气》教后反思
2014/02/12 职场文书
应届本科毕业生求职信
2014/07/23 职场文书
学校四风对照检查材料
2014/08/28 职场文书
欢迎词范文
2015/01/27 职场文书
2015教师节师德演讲稿
2015/03/19 职场文书
2015年党日活动总结范文
2015/03/25 职场文书
驾驶员管理制度范本
2015/08/06 职场文书
合作协议书格式范本
2016/03/21 职场文书
MySQL 重写查询语句的三种策略
2021/05/10 MySQL