前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >记录一个python里面很神奇的操作,对一个包含列表的元组进行增量赋值

记录一个python里面很神奇的操作,对一个包含列表的元组进行增量赋值

原创
作者头像
用户1682544
发布于 2018-07-22 09:14:04
发布于 2018-07-22 09:14:04
1.5K0
举报

# 记录一个python里面很神奇的操作 #

今天记录一个很神奇的操作。关于序列的增量赋值。如果你很熟悉增量赋值,你也不妨看下去,我想说的是有关于增量赋值和元组之间一种神奇的操作。来自 **《流畅的Python》** 一书,让我们更加深入地了解里面的原理

## 神奇的操作 ##

```

>>>t = (1,2,[30,40])

>>>t[2] += [50,60]

```

**上面这段代码会出现什么样的情况**

a. t会变成(1,2,[30,40,50,60])

b. 因为tuple不支持对它的元素赋值,所以会抛出TypeError异常

c. 以上两个都不是

d. a和b都是对的

大多数人都会认为b是正确的,本书的作者也是这么认为的,但是实际上呢?却是选 **b**

**不要疑惑,就是这样,既报错,又成功进行了修改**

## 首先讲一下增量赋值 ##

我们使用增量赋值运算符 **+=** 和 **\*=** 等增量赋值运算符的时候(用 **+=** 举例),使用的是背后的特殊方法 **\_\_iadd\_\_**,如果没有实现这个方法则会退而求其次,使用 **\_\_add\_\_** .

**两者的区别是什么?**

用列表举例 **a+=b**,使用 **\_\_add\_\_** 的话就像是使用了`a.extend(b)`,如果使用 **\_\_add\_\_** 的话,则是 `a = a+b`,前者是直接在原列表上进行扩展,而后者是先从原列表中取出值,在一个新的列表中进行扩展,然后再将新的列表对象返回给变量,显然后者的消耗要大些。

## 继续将那个神奇的操作 ##

既然我们了解了变量赋值,那么我们就可以更深入一些了。

**t[2] += [50,60]** 实现原理:

1. 将t[2]的值,存入TOS(Top Of Stack 栈的顶端)。

2. 计算TOS +=b 。这一步可以完成,是因为TOS指向的是一个列表(可变对象)。

3. t[2] = TOS 赋值。这一步失败,并且报错,因为t是不可变的元组

**我们可以通过python tutor这个网站去找到里面运行的详细过程**

![image](C:/Users/19410/Pictures/python-%E5%A2%9E%E9%87%8F%E8%B5%8B%E5%80%BC.png)

![image](C:/Users/19410/Pictures/python-%E5%A2%9E%E9%87%8F%E8%B5%8B%E5%80%BC2.png)

欢迎关注我的公众号获取更多学习教程(Python雁横)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python中tuple+=赋值的四个问题
花下猫语:上周末,我终于翻译完了《PEP255--简单的生成器》,有同学建议我把后续的相关 PEP 也一起翻译了。我当然有此想法。不只是生成器相关的 PEP,若有余力允许,我还准备偶尔花时间,把其它重要的 PEP 翻译一些呢。不过由于时间、精力与知识深/广度的原因,这件事可急不来。闲聊结束。今天,给大家分享一篇好文章。
Python猫
2019/04/09
8400
红队漏洞研究-fastjsonBasicDataSource链分析
BCEL的全名是Apache Commons BCEL,属于Apache Commons项目下的一个子项目,CC链也就是从Apache Commons产生的。
Gamma实验室
2022/03/29
1.7K0
红队漏洞研究-fastjsonBasicDataSource链分析
夯实Java基础系列8:深入理解Java内部类及其实现原理
本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看
Java技术江湖
2019/09/28
3.6K0
APP热搜榜接口提供 --- 百度
目的地-Destination
2024/08/07
2260
APP热搜榜接口提供 --- 百度
零基础使用Django2.0.1打造在线教育网站(四):简易留言簿基础开发
努力与运动兼备~有任何问题可以加我好友或者关注微信公众号,欢迎交流,我们一起进步!
啃饼思录
2018/08/21
9670
Spring Cloud Tencent 1.7 版本最新发布
导语 Spring Cloud Tencent 1.7 版本现已发布,支持 Spring Cloud Hoxton、2020、2021 版。 1 Part.1 发布项列表 1.7.1-Hoxton.SR12 1.7.0-2020.0.5 1.7.0-2021.0.3 2 Part.2 版本号说明 Spring Cloud Tencent 的版本号由两部分组成,前半段为 Spring Cloud Tencent 自身迭代的版本号,后半段为 Spring Cloud Tencent 针对特定版本的 Spring
腾讯云中间件团队
2022/09/14
5550
Spring Cloud Tencent 1.7 版本最新发布
5秒实现AI语音克隆(Python)
水文一篇,推荐一个有趣的AI黑科技--MockingBird,该项目集成了Python开发,语音提取、录制、调试、训练一体化GUI操作,号称只需要你的 5 秒钟的声音,就能实时克隆出你的任意声音。
算法进阶
2022/06/02
1.8K0
5秒实现AI语音克隆(Python)
实战 | fastjson 漏洞的发现与测试
Fastjson 是阿里巴巴公司开源的一款 json 解析器,其性能优越,被广泛应用于各大厂商的 Java 项目中。fastjson 于 1.2.24 版本后增加了反序列化白名单,而在 1.2.48 以前的版本中,攻击者可以利用特殊构造的 json 字符串绕过白名单检测,成功执行任意命令。
信安之路
2021/12/09
8.9K0
实战 | fastjson 漏洞的发现与测试
使用ArcGIS Pro对卫星图进行建筑轮廓识别和车辆检测
“机器学习”一词的火爆程度无需多言,今年ChatGPT的火爆让每一个都了解到了“人工智能”的巨大潜力。虽然你或多或少接触到“机器学习”、“人工智能”、“深度学习”这些概念,但是依旧会觉得很模糊,容易混淆。
renhai
2023/11/24
1.9K1
使用ArcGIS Pro对卫星图进行建筑轮廓识别和车辆检测
Scrapy笔记三 自动多网页爬取-本wordpress博客所有文章
学习自http://blog.csdn.net/u012150179/article/details/34486677
十四君
2019/11/27
8330
屏蔽禁用main方法RestTemplate控制台debug日志
springboot项目,在main方法中用RestTemplate如果请求比较多,会被RestTemplate的debug日志刷屏,效果如下:
九转成圣
2024/04/10
2580
从零开始,学会Python爬虫不再难!!! -- (2)承接:解析网页,抓取标签 丨蓄力计划
首先可以看到在网页的左侧,输入框有颜色。在网页的右侧,也有一段有颜色的代码,这是怎么肥四呢? 这叫做标记,或者叫搜索,或者叫映射,爱怎么叫怎么叫,咱只需要知道左右两个有颜色的地方是一一对应的。
看、未来
2021/09/18
1.4K0
dotnet C# 如果在构造函数抛出异常 是否可以拿到对象赋值的变量
如果使用某个变量去获取某个类型的对象创建,但是在这个类型的构造函数调用时抛出异常,请问此变量是否可以拿到对应的对象
林德熙
2021/12/24
1K0
ApacheCN 数据科学/人工智能/机器学习知识树 2019.2
【主页】 apachecn.org 【Github】@ApacheCN 暂时下线: 社区 暂时下线: cwiki 知识库 自媒体平台微博:@ApacheCN 知乎:@ApacheCN CSDN 简书 OSChina 博客园 我们不是 Apache 的官方组织/机构/团体,只是 Apache 技术栈(以及 AI)的爱好者! 合作or侵权,请联系【fonttian】<fonttian@gmail.com> | 请抄送一份到 <apachecn@163.com> 预处理 + [离散化](https://git
ApacheCN_飞龙
2019/02/13
5050
PHP的变量赋值
这个标题估计很多人会不屑一顾,变量赋值?excuse me?我们学开发的第一课就会了好不好。但是,就是这样基础的东西,反而会让很多人蒙圈,比如,值和引用的关系。今天,我们就来具体讲讲。
硬核项目经理
2019/12/04
3.8K0
Fastjson姿势技巧集合
https://github.com/safe6Sec/ShiroAndFastJson
阿超
2022/11/10
3.2K0
看了一下午ECharts的文档,发现他们官方有一个bug和n处语病。
https://echarts.apache.org/zh/tutorial.html#ECharts%205%20%E6%96%B0%E7%89%B9%E6%80%A7
拿我格子衫来
2022/01/24
2510
看了一下午ECharts的文档,发现他们官方有一个bug和n处语病。
「sd插件第一篇」sd-webui-EasyPhoto 您的智能 AI 照片生成器
在人工智能盛行的当下,各类大模型如雨后春笋般争先恐后地破土而出,AI绘画作为其中极其重要的一员也不停地向我们展示出它的强大能力。本文是笔者在做证件照时发现的一款stable-diffusion webui的插件,极其好用,向大家推荐一下。从本篇开始,笔者会陆续推出stable-diffusion和Midjourney相关的内容梳理了,后续会推出一系列的stable-diffusion webui的插件教程和讲解,敬请期待。
山行AI
2023/09/08
2.3K0
「sd插件第一篇」sd-webui-EasyPhoto 您的智能 AI 照片生成器
javascript 正则相关的简单应用
<meta http-equiv="Content-type" content="text/html; charset=UTF-8" /> <script type="text/javascript"> /*美妆个护分类信息,采集自京东美妆频道,有了基础信息,我们就可以开始提取我们想要的数据了*/ //取到的数据,没错,这是一段html源码,而我们想要的只是一些分类信息的标签,手动处理数据?估计眼睛得看花吧,于是借助JS来帮助我们。 var str = '<div class="s
Yiiven
2022/12/15
3100
由浅入深的域渗透系列一(上)
二、漏洞利用 3.漏洞搜索与利用 4.后台Getshell上传技巧 5.系统信息收集 6.主机密码收集
重生信息安全
2020/06/04
1.4K0
由浅入深的域渗透系列一(上)
推荐阅读
相关推荐
Python中tuple+=赋值的四个问题
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档