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 相关文章推荐
win7安装python生成随机数代码分享
Dec 27 Python
Python创建日历实例
Aug 21 Python
python版本单链表实现代码
Sep 28 Python
详解Django中CBV(Class Base Views)模型源码分析
Feb 25 Python
python实现栅栏加解密 支持密钥加密
Mar 20 Python
深入了解Python iter() 方法的用法
Jul 11 Python
Flask教程之重定向与错误处理实例分析
Aug 01 Python
用python打开摄像头并把图像传回qq邮箱(Pyinstaller打包)
May 17 Python
django rest framework 过滤时间操作
Jul 12 Python
Python matplotlib模块及柱状图用法解析
Aug 10 Python
python按照list中字典的某key去重的示例代码
Oct 13 Python
python 录制系统声音的示例
Dec 21 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
全国FM电台频率大全 - 13 福建省
2020/03/11 无线电
windows平台中配置nginx+php环境
2015/12/06 PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
2016/03/22 PHP
ThinkPHP框架实现定时执行任务的两种方法分析
2018/09/04 PHP
自动完成JS类(纯JS, Ajax模式)
2009/03/12 Javascript
JavaScript中遍历对象的property的3种方法介绍
2014/12/30 Javascript
javascript实现画不相交的圆
2015/04/07 Javascript
JavaScript知识点总结(十)之this关键字
2016/05/31 Javascript
微信小程序 toast 详解及实例代码
2016/11/09 Javascript
如何使用headjs来管理和异步加载js
2016/11/29 Javascript
详解nodejs实现本地上传图片并预览功能(express4.0+)
2017/06/28 NodeJs
JavaScript监听手机物理返回键的两种解决方法
2017/08/14 Javascript
JS+canvas动态绘制饼图的方法示例
2017/09/12 Javascript
详解微信小程序canvas圆角矩形的绘制的方法
2018/08/22 Javascript
vue实现微信获取用户信息的方法
2019/03/21 Javascript
vue使用recorder.js实现录音功能
2019/11/22 Javascript
JavaScript实现简单验证码
2020/08/24 Javascript
在vs code 中如何创建一个自己的 Vue 模板代码
2020/11/10 Javascript
[04:00]黄浦江畔,再会英雄——完美世界DOTA2 TI9应援视频
2019/07/31 DOTA
解决Python spyder显示不全df列和行的问题
2020/04/20 Python
使用Python绘制台风轨迹图的示例代码
2020/09/21 Python
解决python 在for循环并且pop数组的时候会跳过某些元素的问题
2020/12/11 Python
澳大利高级泳装品牌:Bondi Born
2018/05/23 全球购物
美国购买体育赛事门票网站:TicketCity
2019/03/06 全球购物
Simons官方网站:加拿大时尚零售商
2020/02/20 全球购物
后勤人员自我评价怎么写
2013/09/19 职场文书
园林施工员岗位职责
2013/12/11 职场文书
软件工程毕业生自荐信
2014/07/04 职场文书
高中教师先进事迹材料
2014/08/22 职场文书
青春飞扬演讲稿
2014/09/11 职场文书
搞笑的爱情检讨书
2014/10/01 职场文书
幼儿园安全工作总结2015
2015/04/20 职场文书
化工生产实习心得体会
2016/01/22 职场文书
详解nodejs内置模块
2021/05/06 NodeJs
python的变量和简单数字类型详解
2021/09/15 Python
MySQL数据库Innodb 引擎实现mvcc锁
2022/05/06 MySQL