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读取网页内容的方法
Jul 30 Python
Python判断文件或文件夹是否存在的三种方法
Jul 27 Python
Python三级菜单的实例
Sep 13 Python
Python实现读取Properties配置文件的方法
Mar 29 Python
Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例
Jul 18 Python
12个步骤教你理解Python装饰器
Jul 01 Python
tensorflow 模型权重导出实例
Jan 24 Python
Python模拟FTP文件服务器的操作方法
Feb 18 Python
python中68个内置函数的总结与介绍
Feb 24 Python
python GUI库图形界面开发之PyQt5布局控件QGridLayout详细使用方法与实例
Mar 06 Python
Python内置方法和属性应用:反射和单例(推荐)
Jun 19 Python
Python爬虫后获取重定向url的两种方法
Jan 19 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
php使用curl存储cookie的示例
2014/03/31 PHP
ThinkPHP调用common/common.php函数提示错误function undefined的解决方法
2014/08/25 PHP
php设计模式之代理模式分析【星际争霸游戏案例】
2020/03/23 PHP
JS动画效果代码3
2008/04/03 Javascript
JQuery的AJAX实现文件下载的小例子
2013/05/15 Javascript
jquery用get实现ajax在ie里面刷新不进入后台解决方法
2013/08/12 Javascript
js检测浏览器版本、核心、是否移动端示例
2014/04/24 Javascript
浅谈Javascript数组的使用
2015/07/29 Javascript
jQuery事件绑定用法详解
2016/09/08 Javascript
详解Node.js:events事件模块
2016/11/24 Javascript
基于JavaScript实现移动端无限加载分页
2017/03/27 Javascript
动态Axios的配置步骤详解
2018/01/12 Javascript
微信小程序手机号码验证功能的实例代码
2018/08/28 Javascript
基于JS实现操作成功之后自动跳转页面
2020/09/25 Javascript
vue-axios同时请求多个接口 等所有接口全部加载完成再处理操作
2020/11/09 Javascript
Python中字符串格式化str.format的详细介绍
2017/02/17 Python
用tensorflow构建线性回归模型的示例代码
2018/03/05 Python
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
2018/04/12 Python
详解Python如何生成词云的方法
2018/06/01 Python
详解Python爬取并下载《电影天堂》3千多部电影
2019/04/26 Python
Python pandas.DataFrame调整列顺序及修改index名的方法
2019/06/21 Python
使用python爬取抖音视频列表信息
2019/07/15 Python
打包PyQt5应用时的注意事项
2020/02/14 Python
使用jupyter Nodebook查看函数或方法的参数以及使用情况
2020/04/14 Python
Python headers请求头如何实现快速添加
2020/11/03 Python
css3实现针线缝合效果(图解步骤)
2013/02/04 HTML / CSS
怎样声明接口
2014/09/19 面试题
材料加工工程求职信
2014/02/19 职场文书
美术毕业生求职信
2014/02/25 职场文书
企业管理毕业生求职信范文
2014/03/07 职场文书
《山谷中的谜底》教学反思
2014/04/26 职场文书
高三复习计划
2015/01/19 职场文书
《地震中的父与子》教学反思
2016/02/16 职场文书
Matplotlib可视化之添加让统计图变得简单易懂的注释
2021/06/11 Python
Nginx 路由转发和反向代理location配置实现
2021/11/11 Servers