Python3多目标赋值及共享引用注意事项


Posted in Python onMay 27, 2019

Python中多目标赋值即将等号左边所有的变量名都赋值给右边的对象,完成赋值操作,比如将三个变量同时赋值给一个字符串。

a = b = c = 'Python'
print(a)
print(b)
print(c)

示例结果:

Python
Python
Python

在多目标赋值中,其本质即类似三个变量的指针指向了同一个内存空间,即三个变量共享了内存内同一对象。

不可变对象

对于不可变对象来说,我们在使用这些变量是不存在问题的。

a = b = c = 'Python'
print(a)
print(b)
print(c)
a = 'i like Python'
b = 'Python make me happy'
print(a)
print(b)
print(c)

示例结果:

i like Python
Python make me happy
Python

可以看到这些变量并不会互相影响。

可变对象

而对可变对象来说,比如列表,字典等,多目标赋值变量的使用便会变得棘手些。

L1 = L2 = [1, 2, 3, 4, 5]
print(L1)
print(L2)
# 更改列表L2,从列表尾部删除一个元素
L2.pop()
print(L1)
print(L2)

示例结果:

[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
[1, 2, 3, 4]
[1, 2, 3, 4]

即当我们在使用多目标赋值时,需要考虑对象本身属性是否为可变对象,否则我们应该考虑对每个变量名进行单独赋值或者利用浅拷贝、深拷贝(参考上上...上节《Python列表赋值,复制,深拷贝以及5种浅拷贝详解》)等方式完成多变量的可变对象的赋值,比如我们对多变量进行分别赋值。

L1 = [1, 2, 3, 4, 5]
L2 = [1, 2, 3, 4, 5]
print(L1)
print(L2)
print(id(L1), id(L2))
L2.pop()
print(L1)
print(L2)

示例结果:

[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
2600790220872 2600790206216
[1, 2, 3, 4, 5]
[1, 2, 3, 4]

总结

以上所述是小编给大家介绍的Python3多目标赋值及共享引用注意事项,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python开发之thread实现布朗运动的方法
Nov 11 Python
Windows下Eclipse+PyDev配置Python+PyQt4开发环境
May 17 Python
python利用requests库模拟post请求时json的使用教程
Dec 07 Python
Python计算时间间隔(精确到微妙)的代码实例
Feb 26 Python
pycharm new project变成灰色的解决方法
Jun 27 Python
Python OpenCV之图片缩放的实现(cv2.resize)
Jun 28 Python
python 并发编程 非阻塞IO模型原理解析
Aug 20 Python
python机器学习实现决策树
Nov 11 Python
节日快乐! Python画一棵圣诞树送给你
Dec 24 Python
基于Pyinstaller打包Python程序并压缩文件大小
May 28 Python
Python collections.deque双边队列原理详解
Oct 05 Python
Pandas数据类型之category的用法
Jun 28 Python
Python中字符串String的基本内置函数与过滤字符模块函数的基本用法
May 27 #Python
python占位符输入方式实例
May 27 #Python
numpy.where() 用法详解
May 27 #Python
python numpy实现文件存取的示例代码
May 26 #Python
numpy linalg模块的具体使用方法
May 26 #Python
python flask解析json数据不完整的解决方法
May 26 #Python
如何使用pyinstaller打包32位的exe程序
May 26 #Python
You might like
fleaphp常用方法分页之Pager使用方法
2011/04/23 PHP
关于尾递归的使用详解
2013/05/02 PHP
windows7下php开发环境搭建图文教程
2015/01/06 PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
2017/08/07 PHP
PHP-FPM和Nginx的通信机制详解
2019/02/01 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
2019/09/19 PHP
php接口隔离原则实例分析
2019/11/11 PHP
用javascript实现兼容IE7的类库 IE7_0_9.zip提供下载
2007/08/08 Javascript
获取css样式表内样式的js函数currentStyle(IE),defaultView(FF)
2011/02/14 Javascript
javascript 学习笔记(六)浏览器类型及版本信息检测代码
2011/04/08 Javascript
JS onmousemove鼠标移动坐标接龙DIV效果实例
2013/12/16 Javascript
jQuery文件上传插件Uploadify使用指南
2014/06/05 Javascript
jquery无限级联下拉菜单简单实例演示
2015/11/23 Javascript
探析浏览器执行JavaScript脚本加载与代码执行顺序
2016/01/12 Javascript
省市联动效果的简单实现代码(推荐)
2016/06/06 Javascript
Vue.js动态组件解析
2016/09/09 Javascript
Vue.js组件使用开发实例教程
2016/11/01 Javascript
jQuery ajax 当async为false时解决同步操作失败的问题
2016/11/18 Javascript
JavaScript面向对象分层思维全面解析
2016/11/22 Javascript
Angular4.0中引入laydate.js日期插件的方法教程
2017/12/25 Javascript
Koa2 之文件上传下载的示例代码
2018/03/29 Javascript
Vue中在新窗口打开页面及Vue-router的使用
2018/06/13 Javascript
vue.js this.$router.push获取不到params参数问题
2020/03/03 Javascript
js代码编写无缝轮播图
2020/09/13 Javascript
PYTHON基础-时间日期处理小结
2018/05/05 Python
在python下使用tensorflow判断是否存在文件夹的实例
2019/06/10 Python
解决windows下python3使用multiprocessing.Pool出现的问题
2020/04/08 Python
Python实现画图软件功能方法详解
2020/07/28 Python
python drf各类组件的用法和作用
2021/01/12 Python
Django与AJAX实现网页动态数据显示的示例代码
2021/02/24 Python
初中作文评语
2014/12/25 职场文书
2015年优质护理服务工作总结
2015/04/08 职场文书
2015年普法依法治理工作总结
2015/05/26 职场文书
卡特教练观后感
2015/06/08 职场文书
python中 .npy文件的读写操作实例
2022/04/14 Python
vue实现省市区联动 element-china-area-data插件
2022/04/22 Vue.js