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爬虫之百度API调用方法
Jun 11 Python
python将unicode转为str的方法
Jun 21 Python
简单了解python单例模式的几种写法
Jul 01 Python
python爬虫 基于requests模块的get请求实现详解
Aug 20 Python
python multiprocessing多进程变量共享与加锁的实现
Oct 02 Python
使用sklearn的cross_val_score进行交叉验证实例
Feb 28 Python
python上传时包含boundary时的解决方法
Apr 08 Python
解决python 执行sql语句时所传参数含有单引号的问题
Jun 06 Python
Pandas中两个dataframe的交集和差集的示例代码
Dec 13 Python
Python 利用argparse模块实现脚本命令行参数解析
Dec 28 Python
python上下文管理器异常问题解决方法
Feb 07 Python
Python实战之实现简易的学生选课系统
May 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
比较strtr, str_replace和preg_replace三个函数的效率
2013/06/26 PHP
PHP制作3D扇形统计图以及对图片进行缩放操作实例
2014/10/23 PHP
php实现的css文件背景图片下载器代码
2014/11/11 PHP
文件上传之SWFUpload插件(代码)
2015/07/30 PHP
php获取目录下所有文件及目录(多种方法)(推荐)
2019/05/14 PHP
封装好的省市地区联动控件附下载
2007/08/13 Javascript
JavaScript 计算当天是本年本月的第几周
2009/03/22 Javascript
jquery tab标签页的制作
2010/05/10 Javascript
javascript面向对象入门基础详细介绍
2012/09/05 Javascript
js 获取(接收)地址栏参数值的方法
2013/04/01 Javascript
jquery $(this).attr $(this).val方法使用介绍
2013/10/08 Javascript
JQuery实现绚丽的横向下拉菜单
2013/12/19 Javascript
提升PHP安全:8个必须修改的PHP默认配置
2014/11/17 Javascript
30个经典的jQuery代码开发技巧
2014/12/15 Javascript
jQuery对html元素的取值与赋值实例详解
2015/12/18 Javascript
DeviceOne 让你一见钟情的App快速开发平台
2016/02/17 Javascript
常用jQuery选择器汇总
2017/02/02 Javascript
Webpack实战加载SVG的方法
2017/12/26 Javascript
Vue 中axios配置实例详解
2018/07/27 Javascript
nodejs之koa2请求示例(GET,POST)
2018/08/07 NodeJs
学习React中ref的两个demo示例
2018/08/14 Javascript
vue+VeeValidate 校验范围实例详解(部分校验,全部校验)
2018/10/19 Javascript
vue路由分文件拆分管理详解
2020/08/13 Javascript
状态机的概念和在Python下使用状态机的教程
2015/04/11 Python
Python编程之字符串模板(Template)用法实例分析
2017/07/22 Python
python excel使用xlutils类库实现追加写功能的方法
2018/05/02 Python
Python中的groupby分组功能的实例代码
2018/07/11 Python
Pytorch 使用CNN图像分类的实现
2020/06/16 Python
解决Keras中CNN输入维度报错问题
2020/06/29 Python
利用CSS3的特性改变文本选中时的颜色
2013/09/11 HTML / CSS
PHP面试题-$message和$$message的区别
2015/12/08 面试题
一些关于MySql加速和优化的面试题
2014/01/30 面试题
租房安全协议书
2014/08/20 职场文书
八年级历史教学反思
2016/02/19 职场文书
2016年幼儿园教研活动总结
2016/04/05 职场文书
Golang之sync.Pool使用详解
2021/05/06 Golang