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中list循环语句用法实例
Nov 10 Python
Python中内置的日志模块logging用法详解
Jul 12 Python
Python编程之event对象的用法实例分析
Mar 23 Python
python自定义异常实例详解
Jul 11 Python
Python实现的远程登录windows系统功能示例
Jun 21 Python
Python清空文件并替换内容的实例
Oct 22 Python
浅谈Pycharm中的Python Console与Terminal
Jan 17 Python
python双向链表原理与实现方法详解
Dec 03 Python
Django调用支付宝接口代码实例详解
Apr 04 Python
浅析Python 简单工厂模式和工厂方法模式的优缺点
Jul 13 Python
基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算
Aug 05 Python
Python机器学习之KNN近邻算法
May 14 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
收集的DedeCMS一些使用经验
2007/03/17 PHP
php下使用以下代码连接并测试
2008/04/09 PHP
PHP 数组遍历方法大全(foreach,list,each)
2010/06/30 PHP
php中修改浏览器的User-Agent来伪装你的浏览器和操作系统
2011/07/29 PHP
PHP中如何判断exec函数执行成功?
2016/08/04 PHP
laravel批量生成假数据的方法
2019/10/09 PHP
input+select(multiple) 实现下拉框输入值
2009/05/21 Javascript
判断脚本加载是否完成的方法
2009/05/26 Javascript
formStorage 基于jquery的一个插件(存储表单中元素的状态到本地)
2012/01/20 Javascript
基于JQuery 滑动与动画的说明介绍
2013/04/18 Javascript
javascript实现当前页导航激活的方法
2015/02/27 Javascript
基于jQuery实现的旋转彩圈实例
2015/06/26 Javascript
纯JavaScript代码实现移动设备绘图解锁
2015/10/16 Javascript
详解axios在vue中的简单配置与使用
2017/05/10 Javascript
vue2.0 中#$emit,$on的使用详解
2017/06/07 Javascript
详解vuejs之v-for列表渲染
2017/06/22 Javascript
JavaScript实现微信红包算法及问题解决方法
2018/04/26 Javascript
React+Webpack快速上手指南(小结)
2018/08/15 Javascript
JQuery样式操作、click事件以及索引值-选项卡应用示例
2019/05/14 jQuery
QML实现圆环颜色选择器
2019/09/25 Javascript
element el-tree组件的动态加载、新增、更新节点的实现
2020/02/27 Javascript
JavaScript实现留言板案例
2020/03/17 Javascript
python3+PyQt5图形项的自定义和交互 python3实现page Designer应用程序
2020/07/20 Python
python实现数据分析与建模
2019/07/11 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
2019/08/23 Python
python3 tcp的粘包现象和解决办法解析
2019/12/09 Python
Tessabit美国:集世界奢侈品和设计师品牌的意大利精品买手店
2020/06/29 全球购物
银行存款证明样本
2014/01/17 职场文书
校园十佳歌手策划书
2014/01/22 职场文书
天鹅的故事教学反思
2014/02/04 职场文书
餐厅楼面部长岗位职责范文
2014/02/16 职场文书
搞笑婚礼主持词
2014/03/13 职场文书
思品教学工作总结
2015/08/10 职场文书
2016年五一国际劳动节活动总结
2016/04/06 职场文书
简短的36句中秋节祝福信息语句
2019/09/09 职场文书
使用springboot暴露oracle数据接口的问题
2021/05/07 Oracle