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 自动安装 Rising 杀毒软件
Apr 24 Python
从零学Python之hello world
May 21 Python
使用Python的Twisted框架实现一个简单的服务器
Apr 16 Python
两个命令把 Vim 打造成 Python IDE的方法
Mar 20 Python
Python提取Linux内核源代码的目录结构实现方法
Jun 24 Python
Python中super()函数简介及用法分享
Jul 11 Python
Python删除Java源文件中全部注释的实现方法
Aug 30 Python
答题辅助python代码实现
Jan 16 Python
Python绘制KS曲线的实现方法
Aug 13 Python
如何使用Python实现自动化水军评论
Jun 26 Python
Python之京东商品秒杀的实现示例
Jan 06 Python
让文件路径提取变得更简单的Python Path库
May 27 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 无限级数据JSON格式及JS解析
2010/07/17 PHP
php接口数据加密、解密、验证签名
2015/03/12 PHP
最准确的php截取字符串长度函数
2015/10/29 PHP
使用JavaScript库还是自己写代码?
2010/01/28 Javascript
JavaScript高级程序设计 学习笔记 js高级技巧
2011/09/20 Javascript
Javascript 加载和执行-性能提高篇
2012/12/28 Javascript
jquery异步跨域访问代码
2013/06/28 Javascript
jquery实现带二级菜单的导航示例
2014/04/28 Javascript
深入理解JavaScript系列(46):代码复用模式(推荐篇)详解
2015/03/04 Javascript
JavaScript实现定时隐藏与显示图片的方法
2015/08/06 Javascript
javascript中错误使用var造成undefined
2016/03/31 Javascript
NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解
2017/05/13 NodeJs
mui开发中获取单选按钮、复选框的值(实例讲解)
2017/07/24 Javascript
JS传播事件、取消事件默认行为、阻止事件传播详解
2017/08/14 Javascript
Nodejs连接mysql并实现增、删、改、查操作的方法详解
2018/01/04 NodeJs
使用electron将vue-cli项目打包成exe的方法
2018/09/29 Javascript
vue.js 子组件无法获取父组件store值的解决方式
2019/11/08 Javascript
Vue 实现分页与输入框关键字筛选功能
2020/01/02 Javascript
JavaScript 闭包的使用场景
2020/09/17 Javascript
Python安装模块的常见问题及解决方法
2018/02/05 Python
python3使用QQ邮箱发送邮件
2020/05/20 Python
使用python实现抓取腾讯视频所有电影的爬虫
2019/04/15 Python
用sqlalchemy构建Django连接池的实例
2019/08/29 Python
python 调试冷知识(小结)
2019/11/11 Python
浅析Django中关于session的使用
2019/12/30 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
2020/12/01 Python
html5定制表单_动力节点Java学院整理
2017/07/11 HTML / CSS
HTML5 文件域+FileReader 分段读取文件并上传到服务器
2017/10/23 HTML / CSS
xml有哪些解析技术?区别是什么
2016/04/26 面试题
幼儿园园长岗位职责
2013/11/26 职场文书
学习十八大报告感言
2014/02/04 职场文书
百日安全活动总结
2014/05/04 职场文书
2014幼儿园家长工作总结
2014/11/10 职场文书
运动会通讯稿50字
2015/07/20 职场文书
使用Navicat Premium工具将oracle数据库迁移到MySQL
2021/05/27 Oracle
MySQL日期时间函数知识汇总
2022/03/17 MySQL