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

简介:

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

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

神奇的操作

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

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

  1. t会变成(1,2,[30,40,50,60])
  2. 因为tuple不支持对它的元素赋值,所以会抛出TypeError异常
  3. 以上两个都不是
  4. 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这个网站去找到里面运行的详细过程


欢迎关注我的公众号:Python雁横

目录
相关文章
|
1天前
|
存储 数据处理 索引
Python列表操作的方法总结
通过掌握上述方法,你可以有效地操作Python列表,完成各种数据处理任务。列表的灵活性和多功能性使其成为Python编程中不可或缺的工具。
11 1
|
5天前
|
数据采集 算法 数据处理
Python中的列表推导式:简介与应用
【9月更文挑战第14天】本文旨在介绍Python中一种强大且简洁的构造列表的方法——列表推导式。我们将从基础语法入手,通过实例演示其用法,并探讨在数据处理和算法优化中的应用价值。文章将不包含代码示例,而是专注于概念理解和应用场景的描述,以促进读者对列表推导式的深入认识。
12 3
|
6天前
|
数据采集 数据处理 C语言
探索Python中的列表推导式
本文将深入探讨Python中强大的列表推导式功能,通过实例展示其基本语法、高级用法以及性能优势。我们将从简单的数值操作入手,逐步过渡到处理复杂数据结构,如嵌套列表和字典。此外,文章还将讨论列表推导式在提高代码可读性和减少运行时错误方面的实际价值,并通过与循环语句的对比,揭示其在特定场景下的性能优势。
|
7天前
|
数据处理 开发者 Python
探索Python中的列表推导式
在Python编程中,列表推导式(List Comprehensions)是一种简洁而强大的工具,允许开发者用一行代码生成整个列表。本文将深入探讨列表推导式的用法、优势以及在实际项目中的应用。通过具体的示例,我们将展示如何利用列表推导式简化代码,提升可读性和执行效率。无论你是编程新手还是经验丰富的开发者,都能从本文中获得有价值的见解和技巧。
|
11天前
|
C语言 Python
深入理解并实践Python中的列表推导式
深入理解并实践Python中的列表推导式
10 1
|
3天前
|
数据处理 开发者 Python
探索Python中的列表推导式在Python编程中,列表推导式是一种简洁而高效的方法,用于从现有的列表创建新列表。本文将深入探讨列表推导式的用法、优势以及一些实际应用示例。
列表推导式是Python提供的一种强大工具,它允许开发者以更简洁的语法快速生成列表。通过结合循环和条件语句,列表推导式能够简化代码结构,提高开发效率。本文详细介绍了列表推导式的基本用法,并通过实例展示了其在数据处理、转换和过滤中的广泛应用。
10 0
|
20天前
|
数据处理 开发者 Python
探索Python中的列表推导式:一种简洁而强大的工具
【8月更文挑战第31天】在Python编程中,列表推导式是一种高效且优雅的构建列表的方法。本文将通过实际代码示例深入探讨列表推导式的不同形式及其使用场景,旨在帮助读者更好地理解和运用这一强大工具。
|
Python
python 使用记录
元组比较: 1 >>> (0, 1, 2) < (0, 3, 4) 2 True 3 >>> (0, 1, 2000000) < (0, 3, 4) 4 True 列表的多字段排序: sorted_list = [ [1, 2, 3, 4, 5, 6, 7, 8],...
703 0
|
4天前
|
数据采集 机器学习/深度学习 人工智能
Python编程入门:从零基础到实战应用
【9月更文挑战第15天】本文将引导读者从零开始学习Python编程,通过简单易懂的语言和实例,帮助初学者掌握Python的基本语法和常用库,最终实现一个简单的实战项目。文章结构清晰,分为基础知识、进阶技巧和实战应用三个部分,逐步深入,让读者在学习过程中不断积累经验,提高编程能力。
|
5天前
|
机器学习/深度学习 数据采集 人工智能
探索Python的奥秘:从基础到进阶的编程之旅
在这篇文章中,我们将深入探讨Python编程的基础知识和进阶技巧。通过清晰的解释和实用的示例,无论您是编程新手还是有经验的开发者,都能从中获得有价值的见解。我们将覆盖从变量、数据类型到类和对象的各个方面,助您在编程世界里游刃有余。
23 10