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中下划线的使用方法
Mar 27 Python
使用Python编写一个模仿CPU工作的程序
Apr 16 Python
用Python编写一个简单的CS架构后门的方法
Nov 20 Python
详解python调用cmd命令三种方法
Jul 08 Python
对python中的float除法和整除法的实例详解
Jul 20 Python
Django Rest framework解析器和渲染器详解
Jul 25 Python
tensorflow多维张量计算实例
Feb 11 Python
python使用pyecharts库画地图数据可视化的实现
Mar 25 Python
python实现最短路径的实例方法
Jul 19 Python
Python入门基础之数字字符串与列表
Feb 01 Python
Python还能这么玩之用Python做个小游戏的外挂
Jun 04 Python
Python内置包对JSON文件数据进行编码和解码
Apr 12 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
php笔记之:初探PHPcms模块开发介绍
2013/04/26 PHP
微信公众平台天气预报功能开发
2014/07/06 PHP
yii操作cookie实例简介
2014/07/09 PHP
Laravel第三方包报class not found的解决方法
2019/10/13 PHP
仿jQuery的siblings效果的js代码
2011/08/09 Javascript
鼠标经过显示二级菜单js特效
2013/08/13 Javascript
JS+DIV实现鼠标划过切换层效果的实例代码
2013/11/26 Javascript
Node.js + Redis Sorted Set实现任务队列
2016/09/19 Javascript
JavaScript箭头(arrow)函数详解
2017/06/04 Javascript
基于对象合并功能的实现示例
2017/10/10 Javascript
jquery ajax异步提交表单数据的方法
2017/10/27 jQuery
详解vue中使用vue-quill-editor富文本小结(图片上传)
2019/04/24 Javascript
node中IO以及定时器优先级详解
2019/05/10 Javascript
python中遍历文件的3个方法
2014/09/02 Python
Python切片知识解析
2016/03/06 Python
Python实现的视频播放器功能完整示例
2018/02/01 Python
Python数据可视化教程之Matplotlib实现各种图表实例
2019/01/13 Python
python numpy 按行归一化的实例
2019/01/21 Python
Python3数字求和的实例
2019/02/19 Python
python TK库简单应用(实时显示子进程输出)
2019/10/29 Python
python中format函数如何使用
2020/06/22 Python
Python爬虫+tkinter界面实现历史天气查询的思路详解
2021/02/22 Python
html5 实现客户端验证上传文件的大小(简单实例)
2016/05/15 HTML / CSS
全球领先的在线cosplay服装商店:RoleCosplay
2020/01/18 全球购物
巴西本土电商平台:Americanas
2020/06/21 全球购物
Shell如何接收变量输入
2016/08/06 面试题
运动会通讯稿150字
2014/02/15 职场文书
信息技术毕业生自荐信范文
2014/03/13 职场文书
跳槽求职信范文
2014/05/26 职场文书
教师节感恩老师演讲稿
2014/08/28 职场文书
工作所在部门证明
2014/09/21 职场文书
先进集体申报材料
2014/12/25 职场文书
撤诉申请书法院范本
2015/05/18 职场文书
学习焦裕禄观后感
2015/06/09 职场文书
读《庄子》有感:美而不自知
2019/11/06 职场文书
SpringBoot读取Resource下文件的4种方法
2021/07/02 Java/Android