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的pandas框架操作Excel文件中的数据教程
Mar 31 Python
Python竟能画这么漂亮的花,帅呆了(代码分享)
Nov 15 Python
python代码实现ID3决策树算法
Dec 20 Python
基于anaconda下强大的conda命令介绍
Jun 11 Python
基于python中theano库的线性回归
Aug 31 Python
python scatter散点图用循环分类法加图例
Mar 19 Python
用django-allauth实现第三方登录的示例代码
Jun 24 Python
linux环境中没有网络怎么下载python
Jul 07 Python
Django接收post前端返回的json格式数据代码实现
Jul 31 Python
python区分不同数据类型的方法
Oct 14 Python
Python如何定义有默认参数的函数
Aug 10 Python
浅谈Python项目的服务器部署
Apr 25 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
thinkphp验证码显示不出来的解决方法
2014/03/29 PHP
10条php编程小技巧
2015/07/07 PHP
学习php设计模式 php实现适配器模式
2015/12/07 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
javascript 动态添加事件代码
2008/11/30 Javascript
AngularJS学习笔记之TodoMVC的分析
2015/02/22 Javascript
JS使用oumousemove和oumouseout动态改变图片显示的方法
2015/03/31 Javascript
TypeScript 学习笔记之基本类型
2015/06/19 Javascript
CSS3实现动态背景登录框的代码
2015/07/28 Javascript
NodeJs测试框架Mocha的安装与使用
2017/03/28 NodeJs
浅析JS中的 map, filter, some, every, forEach, for in, for of 用法总结
2017/03/29 Javascript
微信小程序网络请求的封装与填坑之路
2017/04/01 Javascript
JS实现网页抢购功能(触发,终止脚本)
2017/11/27 Javascript
vue 属性拦截实现双向绑定的实例代码
2018/10/24 Javascript
vue实现记事本功能
2019/06/26 Javascript
LayUi使用switch开关,动态的去控制它是否被启用的方法
2019/09/21 Javascript
vue移动端使用canvas签名的实现
2020/01/15 Javascript
vue elementui 实现搜索栏公共组件封装的实例代码
2020/01/20 Javascript
Nuxt.js nuxt-link与router-link的区别说明
2020/11/06 Javascript
[01:03:33]Alliance vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
python中协程实现TCP连接的实例分析
2018/10/14 Python
Python设计模式之迭代器模式原理与用法实例分析
2019/01/10 Python
python实现矩阵打印
2019/03/02 Python
python openpyxl使用方法详解
2019/07/18 Python
Python 类属性与实例属性,类对象与实例对象用法分析
2019/09/20 Python
爱尔兰灯和灯具网上商店:Lights.ie
2018/03/26 全球购物
来自圣地亚哥的实惠太阳镜:Knockaround
2018/08/27 全球购物
汉语专业应届生求职信
2013/10/01 职场文书
欢迎标语大全
2014/06/21 职场文书
居委会四风问题个人对照检查材料
2014/09/25 职场文书
担保贷款承诺书
2015/04/30 职场文书
幼儿园大班开学寄语(2016秋季)
2015/12/03 职场文书
“学党章、守党纪、讲党规”学习心得体会
2016/01/14 职场文书
个人的事迹材料怎么写
2019/04/24 职场文书
创业计划书之珠宝饰品
2019/08/26 职场文书
MySQL中几种插入和批量语句实例详解
2021/09/14 MySQL