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 相关文章推荐
django模型中的字段和model名显示为中文小技巧分享
Nov 18 Python
分析Python中设计模式之Decorator装饰器模式的要点
Mar 02 Python
Python2和Python3中urllib库中urlencode的使用注意事项
Nov 26 Python
python广度优先搜索得到两点间最短路径
Jan 17 Python
python3.4爬虫demo
Jan 22 Python
python的turtle库使用详解
May 10 Python
通过python实现windows桌面截图代码实例
Jan 17 Python
python剪切视频与合并视频的实现
Mar 03 Python
Python数据相关系数矩阵和热力图轻松实现教程
Jun 16 Python
python怎么判断模块安装完成
Jun 19 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
Nov 11 Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
Jan 06 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
匹配csdn用户数据库与官方用户的重合度并将重叠部分的用户筛选出来
2011/12/25 PHP
php中3种方法统计字符串中每种字符的个数并排序
2012/08/27 PHP
php错误级别的设置方法
2013/06/17 PHP
php中使用sftp教程
2015/03/30 PHP
php把数组值转换成键的方法
2015/07/13 PHP
Mootools 1.2教程 Tooltips
2009/09/15 Javascript
基于JQuery的简单实现折叠菜单代码
2010/09/15 Javascript
JavaScript中为什么null==0为false而null大于=0为true(个人研究)
2013/09/16 Javascript
jQuery多级弹出菜单插件ZoneMenu
2014/12/18 Javascript
原生js实现的贪吃蛇网页版游戏完整实例
2015/05/18 Javascript
jQuery的bind()方法使用详解
2015/07/15 Javascript
js基础知识(公有方法、私有方法、特权方法)
2015/11/06 Javascript
JS组件Bootstrap实现弹出框和提示框效果代码
2015/12/08 Javascript
jquery层级选择器(匹配父元素下的子元素实现代码)
2016/09/05 Javascript
Node.js 实现简单小说爬虫实例
2016/11/18 Javascript
Javascript 实现计算器时间功能详解及实例(二)
2017/01/08 Javascript
js实现移动端微信页面禁止字体放大
2017/02/16 Javascript
jQuery中的deferred对象和extend方法详解
2017/05/08 jQuery
AngularJS实现的输入框字数限制提醒功能示例
2017/10/26 Javascript
Koa2微信公众号开发之消息管理
2018/05/16 Javascript
Javascript获取某个月的天数
2018/05/30 Javascript
详解mpvue scroll-view自动回弹bug解决方案
2018/10/01 Javascript
解决element-ui的下拉框有值却无法选中的情况
2020/11/07 Javascript
python翻译软件实现代码(使用google api完成)
2013/11/26 Python
python dataframe常见操作方法:实现取行、列、切片、统计特征值
2018/06/09 Python
元组列表字典(莫烦python基础)
2019/04/03 Python
在pycharm下设置自己的个性模版方法
2019/07/15 Python
Pytorch.nn.conv2d 过程验证方式(单,多通道卷积过程)
2020/01/03 Python
Python基于Tkinter编写crc校验工具
2020/05/06 Python
程序设计HTML5 Canvas API
2013/04/08 HTML / CSS
网站性能延迟加载图像的五种技巧(小结)
2020/08/13 HTML / CSS
Amara德国:家居饰品、设计师品牌和豪华礼品
2019/05/20 全球购物
澳大利亚厨房和家用电器购物网站:Bing Lee
2021/01/11 全球购物
办公室内勤岗位职责范本
2013/12/09 职场文书
诉讼代理人授权委托书
2014/10/11 职场文书
用golang如何替换某个文件中的字符串
2021/04/25 Golang