深入理解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循环(包括while&for)各种打印九九乘法表的实例
Nov 06 Python
Python图形绘制操作之正弦曲线实现方法分析
Dec 25 Python
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
Oct 17 Python
Python从文件中读取数据的方法讲解
Feb 14 Python
Tensorflow 1.0之后模型文件、权重数值的读取方式
Feb 12 Python
Python dict和defaultdict使用实例解析
Mar 12 Python
Python的历史与优缺点整理
May 26 Python
python删除指定列或多列单个或多个内容实例
Jun 28 Python
python爬虫搭配起Bilibili唧唧的流程分析
Dec 01 Python
python 基于opencv实现图像增强
Dec 23 Python
Python页面加载的等待方式总结
Feb 28 Python
Python+Selenium实现抖音、快手、B站、小红书、微视、百度好看视频、西瓜视频、微信视频号、搜狐视频、一点号、大风号、趣头条等短视频自动发布
Apr 13 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
生成sessionid和随机密码的例子
2006/10/09 PHP
浅谈PHP中pack、unpack的详细用法
2018/03/12 PHP
PHP之认识(二)关于Traits的用法详解
2019/04/11 PHP
新闻内页-JS分页
2006/06/07 Javascript
删除重复数据的算法
2006/11/23 Javascript
在IE下获取object(ActiveX)的Param的代码
2009/09/15 Javascript
Jquery 快速构建可拖曳的购物车DragDrop
2009/11/30 Javascript
SharePoint 客户端对象模型 (一) ECMA Script
2011/05/22 Javascript
jQuery :first选择器使用介绍
2013/08/09 Javascript
深入理解JavaScript中的传值与传引用
2013/12/09 Javascript
JavaScript获取图片真实大小代码实例
2014/09/24 Javascript
json实现前后台的相互传值详解
2015/01/05 Javascript
JS获取表格内指定单元格html内容的方法
2015/03/31 Javascript
javascript实现的淘宝旅行通用日历组件用法实例
2015/08/03 Javascript
Node.js中使用socket创建私聊和公聊聊天室
2015/11/19 Javascript
JavaScript中Array的实用操作技巧分享
2016/09/11 Javascript
jQuery仿移动端支付宝键盘的实现代码
2018/08/15 jQuery
简单实现vue中的依赖收集与响应的方法
2019/02/18 Javascript
详解基于mpvue微信小程序下载远程图片到本地解决思路
2019/05/16 Javascript
VUE实现密码验证与提示功能
2019/10/18 Javascript
JS字符串和数组如何实现相互转化
2020/07/02 Javascript
[48:37]EG vs OG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python的Bottle框架中获取制定cookie的教程
2015/04/24 Python
从头学Python之编写可执行的.py文件
2017/11/28 Python
Python爬虫实现爬取京东手机页面的图片(实例代码)
2017/11/30 Python
用django-allauth实现第三方登录的示例代码
2019/06/24 Python
在python中用print()输出多个格式化参数的方法
2019/07/16 Python
pandas 如何分割字符的实现方法
2019/07/29 Python
使用Python函数进行模块化的实现
2019/11/15 Python
CSS3条纹背景制作的实战攻略
2016/05/31 HTML / CSS
卡塔尔航空官方网站:Qatar Airways
2017/02/08 全球购物
C&A巴西网上商店:时尚、衣服、手机和鞋子
2020/06/07 全球购物
作文评语大全
2014/04/23 职场文书
大学生党员自我批评思想汇报
2014/10/10 职场文书
大学生读书笔记大全
2015/07/01 职场文书
SpringBoot中HttpSessionListener的简单使用方式
2022/03/17 Java/Android