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回调函数的使用方法
Jan 23 Python
python生成tensorflow输入输出的图像格式的方法
Feb 12 Python
Python SVM(支持向量机)实现方法完整示例
Jun 19 Python
Django给admin添加Action的步骤详解
May 01 Python
python 使用pdfminer3k 读取PDF文档的例子
Aug 27 Python
Django 创建后台,配置sqlite3教程
Nov 18 Python
Python+Selenium+phantomjs实现网页模拟登录和截图功能(windows环境)
Dec 11 Python
浅谈Python中re.match()和re.search()的使用及区别
Apr 14 Python
如何理解python对象
Jun 21 Python
python实现npy格式文件转换为txt文件操作
Jul 01 Python
python 如何利用argparse解析命令行参数
Sep 11 Python
python识别围棋定位棋盘位置
Jul 26 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源代码
2009/08/21 PHP
一个完整的PHP类包含的七种语法说明
2015/06/04 PHP
php 输出json及显示json中的中文汉字详解及实例
2016/11/09 PHP
thinkphp中的多表关联查询的实例详解
2017/10/12 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
JS维吉尼亚密码算法实现代码
2010/11/09 Javascript
用JQUERY增删元素的代码
2012/02/14 Javascript
NodeJS的模块写法入门(实例代码)
2012/03/07 NodeJs
jquery限制输入字数,并提示剩余字数实现代码
2012/12/24 Javascript
NodeJS学习笔记之(Url,QueryString,Path)模块
2015/01/13 NodeJs
Jquery Ajax xmlhttp请求成功问题
2015/02/04 Javascript
Jquery中CSS选择器用法分析
2015/02/10 Javascript
JS模式之单例模式基本用法
2015/06/30 Javascript
基于JavaScript怎么实现让歌词滚动播放
2015/11/03 Javascript
JS实现字符串转日期并比较大小实例分析
2015/12/09 Javascript
js模糊查询实例分享
2016/12/26 Javascript
React-native桥接Android原生开发详解
2018/01/17 Javascript
详解vue指令与$nextTick 操作DOM的不同之处
2018/08/02 Javascript
vue excel上传预览和table内容下载到excel文件中
2019/12/10 Javascript
微信小程序返回上一级页面的实现代码
2020/06/19 Javascript
解决vuex改变了state的值,但是页面没有更新的问题
2020/11/12 Javascript
python友情链接检查方法
2015/07/08 Python
微信跳一跳python辅助软件思路及图像识别源码解析
2018/01/04 Python
Python实现将照片变成卡通图片的方法【基于opencv】
2018/01/17 Python
深入浅析Python中的yield关键字
2018/01/24 Python
python抽取指定url页面的title方法
2018/05/11 Python
python操作excel的方法(xlsxwriter包的使用)
2018/06/11 Python
Python实现常见的回文字符串算法
2018/11/14 Python
对python3 中方法各种参数和返回值详解
2018/12/15 Python
python和php哪个更适合写爬虫
2020/06/22 Python
Javascript 高级手势使用介绍
2013/04/21 HTML / CSS
浅谈html5之sse服务器发送事件EventSource介绍
2017/08/28 HTML / CSS
安全生产工作汇报材料
2014/10/28 职场文书
关于战胜挫折的名言警句大全!
2019/07/05 职场文书
在 SQL 语句中处理 NULL 值的方法
2021/06/07 SQL Server
Elasticsearch 聚合查询和排序
2022/04/19 Python