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检测主机的连通性并记录到文件的实例
Jun 21 Python
Python3 jupyter notebook 服务器搭建过程
Nov 30 Python
Django 全局的static和templates的使用详解
Jul 19 Python
Python + Flask 实现简单的验证码系统
Oct 01 Python
python中从for循环延申到推导式的具体使用
Nov 29 Python
Python如何基于rsa模块实现非对称加密与解密
Jan 03 Python
keras使用Sequence类调用大规模数据集进行训练的实现
Jun 22 Python
利用Python将多张图片合成视频的实现
Nov 23 Python
python解压zip包中文乱码解决方法
Nov 27 Python
python如何发送带有附件、正文为HTML的邮件
Feb 27 Python
Python-OpenCV实现图像缺陷检测的实例
Jun 11 Python
详解PyTorch模型保存与加载
Apr 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
example1.php
2006/10/09 PHP
关于使用coreseek并为其做分页的介绍
2013/06/21 PHP
codeigniter教程之上传视频并使用ffmpeg转flv示例
2014/02/13 PHP
Apache连接PHP后无法启动问题解决思路
2015/06/18 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
2018/07/17 PHP
Laravel5框架添加自定义辅助函数的方法
2018/08/01 PHP
JavaScript开发时的五个注意事项
2007/12/08 Javascript
javascript 写类方式之五
2009/07/05 Javascript
两种WEB下的模态对话框 (asp.net或js的分别实现)
2009/12/02 Javascript
非html5实现js版弹球游戏示例代码
2013/09/22 Javascript
深入理解Javascript作用域与变量提升
2013/12/09 Javascript
对Web开发中前端框架与前端类库的一些思考
2015/03/27 Javascript
JavaScript DOM 学习总结(五)
2015/11/24 Javascript
详解js运算符单竖杠“|”与“||”的用法和作用介绍
2016/11/04 Javascript
JS中对数组元素进行增删改移的方法总结
2016/12/15 Javascript
Javascript中数组去重与拍平的方法示例
2017/02/03 Javascript
基于JS实现二维码图片固定在右下角某处并跟随滚动条滚动
2017/02/08 Javascript
jQuery实现菜单的显示和隐藏功能示例
2018/07/24 jQuery
利用numpy实现一、二维数组的拼接简单代码示例
2017/12/15 Python
浅谈flask源码之请求过程
2018/07/26 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
2019/08/27 Python
python GUI库图形界面开发之PyQt5拖放控件实例详解
2020/02/25 Python
Python利用Xpath选择器爬取京东网商品信息
2020/06/01 Python
使用sklearn对多分类的每个类别进行指标评价操作
2020/06/11 Python
美国受信赖的教育产品供应商:Nest Learning
2018/06/14 全球购物
感恩节红领巾广播稿
2014/02/11 职场文书
土木工程专业推荐信
2014/02/19 职场文书
车辆转让协议书
2014/04/15 职场文书
运动会拉拉队口号
2014/06/09 职场文书
幼儿园大班毕业评语
2014/12/31 职场文书
刑事上诉状(无罪)
2015/05/23 职场文书
员工安全责任协议书
2016/03/22 职场文书
Pytorch 如何实现常用正则化
2021/05/27 Python
Spring中的使用@Async异步调用方法
2021/11/01 Java/Android
「我的青春恋爱物语果然有问题。-妄言录-」第20卷封面公开
2022/03/21 日漫
VW、VH适配移动端的解决方案与常见问题
2023/05/21 HTML / CSS