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装饰器
Sep 29 Python
使用python爬虫实现网络股票信息爬取的demo
Jan 05 Python
安装python3的时候就是输入python3死活没有反应的解决方法
Jan 24 Python
python3爬取各类天气信息
Feb 24 Python
pandas实现选取特定索引的行
Apr 20 Python
解决pandas无法在pycharm中使用plot()方法显示图像的问题
May 24 Python
python中计算一个列表中连续相同的元素个数方法
Jun 29 Python
python+opencv实现摄像头调用的方法
Jun 22 Python
python 实现创建文件夹和创建日志文件的方法
Jul 07 Python
如何基于Python + requests实现发送HTTP请求
Jan 13 Python
Python离线安装openpyxl模块的步骤
Mar 30 Python
python入门之算法学习
Apr 22 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查看session内容的函数
2008/08/27 PHP
Apache+php+mysql在windows下的安装与配置图解(最新版)
2008/11/30 PHP
基于PHP magic_quotes_gpc的使用方法详解
2013/06/24 PHP
PHP数组去重的更快实现方式分析
2018/05/09 PHP
PHP SESSION机制的理解与实例
2019/03/22 PHP
js 判断 enter 事件
2009/02/12 Javascript
NodeJS中Buffer模块详解
2015/01/07 NodeJs
javascript与css3动画结合使用小结
2015/03/11 Javascript
jquery中attr和prop的区别分析
2015/03/16 Javascript
实例剖析AngularJS框架中数据的双向绑定运用
2016/03/04 Javascript
AngularJS 所有版本下载地址
2016/09/14 Javascript
Vue.js教程之计算属性
2016/11/11 Javascript
浅谈React前后端同构防止重复渲染
2018/01/05 Javascript
vue中实现先请求数据再渲染dom分享
2018/03/17 Javascript
基于vue.js组件实现分页效果
2018/12/29 Javascript
vue自定义指令之面板拖拽的实现
2019/04/14 Javascript
JavaScript实现的弹出遮罩层特效经典示例【基于jQuery】
2019/07/10 jQuery
微信小程序之数据绑定原理解析
2019/08/14 Javascript
[38:42]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第二场 11.05
2020/11/05 DOTA
Matplotlib 生成不同大小的subplots实例
2018/05/25 Python
对sklearn的使用之数据集的拆分与训练详解(python3.6)
2018/12/14 Python
python 限制函数执行时间,自己实现timeout的实例
2019/01/12 Python
安装docker-compose的两种最简方法
2019/07/30 Python
python opencv图片编码为h264文件的实例
2019/12/12 Python
pytorch中tensor张量数据类型的转化方式
2019/12/31 Python
用sleep间隔进行python反爬虫的实例讲解
2020/11/30 Python
最好的意大利皮夹克:D’Arienzo
2018/12/04 全球购物
实习自荐信
2013/10/13 职场文书
毕业生个人求职自荐信
2014/02/26 职场文书
高校教师自荐信范文
2014/03/13 职场文书
爱心捐款倡议书
2014/04/14 职场文书
村抢险救灾方案
2014/05/09 职场文书
护士个人年度总结范文
2015/02/13 职场文书
2016中秋节晚会开场白
2015/11/26 职场文书
《称赞》教学反思
2016/02/17 职场文书
Python Django 后台管理之后台模型属性详解
2021/04/25 Python