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 30 Python
Python和Ruby中each循环引用变量问题(一个隐秘BUG?)
Jun 04 Python
Python实现栈的方法
May 26 Python
Django中对通过测试的用户进行限制访问的方法
Jul 23 Python
基于python实现微信模板消息
Dec 21 Python
Android分包MultiDex策略详解
Oct 30 Python
python实现用户管理系统
Jan 10 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
May 31 Python
python3使用腾讯企业邮箱发送邮件的实例
Jun 28 Python
django认证系统 Authentication使用详解
Jul 22 Python
Pandas聚合运算和分组运算的实现示例
Oct 17 Python
使用jupyter notebook运行python和R的步骤
Aug 13 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魔术变量用法实例详解
2014/11/13 PHP
php中解析带中文字符的url函数分享
2015/01/20 PHP
优化WordPress中文章与评论的时间显示
2016/01/12 PHP
详谈PHP中的密码安全性Password Hashing
2017/02/04 PHP
ThinkPHP5.1的权限控制怎么写?分享一个AUTH权限控制
2021/03/09 PHP
JS的递增/递减运算符和带操作的赋值运算符的等价式
2007/12/08 Javascript
10个基于jQuery或JavaScript的WYSIWYG 编辑器整理
2010/05/06 Javascript
JS 添加千分位与去掉千分位的示例
2013/07/11 Javascript
Knockout数组(observable)使用详解示例
2013/11/15 Javascript
jquery使用hide方法隐藏指定id的元素
2015/03/30 Javascript
文件上传,iframe跨域数据提交的实现
2016/11/18 Javascript
Bootstrap 填充Json数据的实例代码
2017/01/11 Javascript
利用JS测试目标网站的打开响应速度
2017/12/01 Javascript
微信小程序自定义select下拉选项框组件的实现代码
2018/08/28 Javascript
ng-events类似ionic中Events的angular全局事件
2018/09/05 Javascript
[48:24]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第一场 12.09
2020/12/12 DOTA
采用Psyco实现python执行速度提高到与编译语言一样的水平
2014/10/11 Python
python清除字符串里非数字字符的方法
2015/07/02 Python
详解Python的Django框架中的Cookie相关处理
2015/07/22 Python
使用python实现省市三级菜单效果
2016/01/20 Python
Python中random模块生成随机数详解
2016/03/10 Python
使用python 和 lint 删除项目无用资源的方法
2017/12/20 Python
python字符串与url编码的转换实例
2018/05/10 Python
Python实现的读取电脑硬件信息功能示例
2018/05/30 Python
Python寻找路径和查找文件路径的示例
2019/07/10 Python
Cotton On南非:澳洲时尚平价品牌
2018/06/28 全球购物
使用Vue.js和MJML创建响应式电子邮件
2021/03/23 Vue.js
金属材料工程毕业生个人的自我评价
2013/11/28 职场文书
初中女生自我鉴定
2013/12/19 职场文书
管理心得体会
2013/12/28 职场文书
军训自我鉴定范文
2014/02/13 职场文书
群众路线教育实践活动心得体会
2014/03/07 职场文书
党的群众路线教育实践活动总结报告
2014/07/03 职场文书
2015年护士医德医风自我评价
2015/03/03 职场文书
四十年同学聚会致辞
2015/07/28 职场文书
Windows Server 2012 修改远程默认端口3389的方法
2022/04/28 Servers