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中的type()方法的使用
May 21 Python
Python之re操作方法(详解)
Jun 14 Python
Python实现动态加载模块、类、函数的方法分析
Jul 18 Python
Python编程之字符串模板(Template)用法实例分析
Jul 22 Python
Python实现自动发送邮件功能
Mar 02 Python
使用python生成目录树
Mar 29 Python
解决django 新增加用户信息出现错误的问题
Jul 28 Python
NumPy排序的实现
Jan 21 Python
使用npy转image图像并保存的实例
Jul 01 Python
Python如何急速下载第三方库详解
Nov 02 Python
详解Python为什么不用设计模式
Jun 24 Python
python实现简易自习室座位预约系统
Jun 30 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在线代理转向代码
2012/05/05 PHP
PHP中函数rand和mt_rand的区别比较
2012/12/26 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
2014/04/29 PHP
CI框架常用经典操作类总结(路由,伪静态,分页,session,验证码等)
2016/11/21 PHP
基于JQuery的数字改变的动画效果--可用来做计数器
2010/08/11 Javascript
JavaScript 一道字符串分解的题目
2011/08/03 Javascript
jquery中的$(document).ready()使用小结
2014/02/14 Javascript
JS对img标签进行优化使用onerror显示默认图像
2014/04/24 Javascript
DOM基础教程之使用DOM控制表格
2015/01/20 Javascript
JS实现为表格动态添加标题的方法
2015/03/31 Javascript
基于JS2Image实现圣诞树代码
2015/12/24 Javascript
分享12个实用的jQuery代码片段
2016/03/09 Javascript
JavaScript基础之AJAX简单的小demo
2017/01/29 Javascript
深入浅析Node.js单线程模型
2017/07/10 Javascript
json字符串传到前台input的方法
2018/08/06 Javascript
ES6使用新特性Proxy实现的数据绑定功能实例
2020/05/11 Javascript
Python的Django框架中的表单处理示例
2015/07/17 Python
深入理解Python单元测试unittest的使用示例
2017/11/18 Python
Python爬取十篇新闻统计TF-IDF
2018/01/03 Python
Python获取本机所有网卡ip,掩码和广播地址实例代码
2018/01/22 Python
python使用wxpy实现微信消息防撤回脚本
2019/04/29 Python
Pytorch抽取网络层的Feature Map(Vgg)实例
2019/08/20 Python
基于Python的接口自动化unittest测试框架和ddt数据驱动详解
2021/01/27 Python
css3实现3D文本悬停改变效果的示例代码
2019/01/16 HTML / CSS
HTML5之SVG 2D入门4—笔画与填充
2013/01/30 HTML / CSS
localstorage和sessionstorage使用记录(推荐)
2017/05/23 HTML / CSS
Html5自定义字体解决方法
2019/10/09 HTML / CSS
大学生创业计划书的用途
2014/01/08 职场文书
《雨点儿》教学反思
2014/04/14 职场文书
爱护花草树木的标语
2014/06/11 职场文书
办公室文员岗位职责
2015/02/04 职场文书
css3 filter属性的使用简介
2021/03/31 HTML / CSS
MongoDB日志切割的三种方式总结
2021/09/15 MongoDB
python在package下继续嵌套一个package
2022/04/14 Python
Windows 64位 安装 mysql 8.0.28 图文教程
2022/04/19 MySQL
virtualenv隔离Python环境的问题解析
2022/06/21 Python