深入理解Python中的*重复运算符


Posted in Python onOctober 28, 2017

在python中有个特殊的符号“*”,可以用做数值运算的乘法算子,也是用作对象的重复算子,但在作为重复算子使用时一定要注意

注意的是:*重复出来的各对象具有同一个id,也就是指向在内存中同一块地址,在对各个对象进行操作是一定要注意。

举例来说:

>>> alist = [range(3)]*4
>>> alist
[[0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2]]

上面初始化一个二层列表用来模拟矩阵,该矩阵式4X3的,为描述方便,这里记矩阵为A。

现在我想给A11赋值为1,用下面的代码:

alist[0][0]=1

那我们想要的结果应该是:

[[1, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2]]

可是很不幸,我们得到的是:

[[1, 1, 2], [1, 1, 2], [1, 1, 2], [1, 1, 2]]

这是怎么回事呢,为什么给A21赋值,其他的Ai1为什么都跟着变了呢?

原因是这样的:

文章开始的时候我们已经说过了,*重复出来的各对象具有同一个id,也就是指向在内存中同一块地址,在对各个对象进行操作是一定要注意。

我们再初始化的时候用了重复算子"*",这个操作符在对对象进行重复操作时,会将重复的所有对象都指向同一块内存地址,所有当你改变其中的一个值时,其他的值自然也会更新,用python的话进行解释就是下面的命令及输出:

>>> id(alist[0])
18858192
>>> id(alist[1])
18858192
>>> id(alist[2])
18858192
>>> id(alist[3])
18858192
>>>

看到了吧,id都是一样滴,也就是说这4个list是同一个“list”。

既然这样那我们想要模拟一个矩阵怎么办呢,除了有专门的numpy包之外,你当然可以给上层list逐个的append新的list,例如:

>>> blist=[]
>>> for i in range(4):
  blist.append([j for j in range(3)])
>>> blist
[[0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2]]

这样,我们再试试上面的赋值操作:

>>> blist[0][0]=1
>>> blist
[[1, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2]]
>>>

总结

以上就是本文关于深入理解Python中的*重复运算符的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:13个最常用的Python深度学习库介绍、python探索之BaseHTTPServer-实现Web服务器介绍等,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
python使用mailbox打印电子邮件的方法
Apr 30 Python
python异常和文件处理机制详解
Jul 19 Python
python 中random模块的常用方法总结
Jul 08 Python
Python使用matplotlib填充图形指定区域代码示例
Jan 16 Python
Python装饰器模式定义与用法分析
Aug 06 Python
python多线程调用exit无法退出的解决方法
Feb 18 Python
Python时间差中seconds和total_seconds的区别详解
Dec 26 Python
django项目中新增app的2种实现方法
Apr 01 Python
Selenium向iframe富文本框输入内容过程图解
Apr 10 Python
python3爬虫中异步协程的用法
Jul 10 Python
分享一枚pycharm激活码适用所有pycharm版本我的pycharm2020.2.3激活成功
Nov 20 Python
Python 内存管理机制全面分析
Jan 16 Python
13个最常用的Python深度学习库介绍
Oct 28 #Python
python探索之BaseHTTPServer-实现Web服务器介绍
Oct 28 #Python
Python探索之实现一个简单的HTTP服务器
Oct 28 #Python
Python探索之SocketServer详解
Oct 28 #Python
Bottle框架中的装饰器类和描述符应用详解
Oct 28 #Python
Pandas探索之高性能函数eval和query解析
Oct 28 #Python
Python探索之URL Dispatcher实例详解
Oct 28 #Python
You might like
php基础知识:类与对象(2) 自动加载对象
2006/12/13 PHP
php简单生成随机数的方法
2015/07/30 PHP
Zend Framework教程之视图组件Zend_View用法详解
2016/03/05 PHP
thinkPHP5.0框架URL访问方法详解
2017/03/18 PHP
浅谈Yii乐观锁的使用及原理
2017/07/25 PHP
php实现微信小程序授权登录功能(实现流程)
2019/11/13 PHP
DHTML 中的绝对定位
2006/11/26 Javascript
Javascript优化技巧(文件瘦身篇)
2008/01/28 Javascript
javascript自适应宽度的瀑布流实现思路
2013/02/20 Javascript
js播放wav文件(源码)
2013/04/22 Javascript
浅析offsetLeft,Left,clientLeft之间的区别
2013/11/30 Javascript
jQuery filter函数使用方法
2014/05/19 Javascript
JavaScript移除数组内重复元素的方法
2015/03/18 Javascript
js通过iframe加载外部网页的实现代码
2015/04/05 Javascript
jquery实现弹出层效果实例
2015/05/19 Javascript
JS实现仿Windows7风格的网页右键菜单效果代码
2015/09/11 Javascript
jQuery插件开发汇总
2016/05/15 Javascript
jQuery.parseHTML() 函数详解
2017/01/09 Javascript
分享5个好用的javascript文件上传插件
2018/09/16 Javascript
vue实现鼠标移入移出事件代码实例
2019/03/27 Javascript
Vue学习之常用指令实例详解
2020/01/06 Javascript
解决VUE自定义拖拽指令时 onmouseup 与 click事件冲突问题
2020/07/24 Javascript
[05:02]2014DOTA2 TI中国区预选赛精彩TOPPLAY第三弹
2014/06/25 DOTA
Python实现按特定格式对文件进行读写的方法示例
2017/11/30 Python
python dataframe astype 字段类型转换方法
2018/04/11 Python
django中使用事务及接入支付宝支付功能
2019/09/15 Python
Python中读取文件名中的数字的实例详解
2020/12/25 Python
python中numpy数组与list相互转换实例方法
2021/01/29 Python
荷兰皇家航空公司中国官网:KLM中国
2017/12/13 全球购物
运动会解说词100字
2014/01/31 职场文书
个人向公司借款协议书
2014/10/09 职场文书
县政协领导班子群众路线教育实践活动四风问题整改方案
2014/10/26 职场文书
2015年体育教学工作总结
2015/05/20 职场文书
工作建议书范文
2019/07/08 职场文书
HTTP中的Content-type详解
2022/01/18 HTML / CSS
python单向链表实例详解
2022/05/25 Python