我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python:序列的增量赋值

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python:序列的增量赋值

增量赋值运算符有 += 和 *=。+= 背后的特殊方法是 __iadd__,如果一个类没有实现 __iadd__ 方法,Python 会退一步调用 __add__ 方法。这两个方法的区别在于,__iadd__ 为就地改动,不会改变原值的内存地址,而 __add__ 方法会得到一个新对象。

考虑下面一个表达式:

  a += b

如果 a 实现了 __iadd__ 方法,a 会就地改动(内存地址不变)。如果 a 没有实现 __iadd__ 方法,那么 a += b 这个表达式的效果就变得跟 a = a + b 一样了,生成一个新的对象赋给 a。

总体来讲,可变序列一般都实现了 __iadd__ 方法,因此 += 是就地加法,而不可变序列根本就不支持这个操作。

*= 和 += 一样,只是背后的特殊方法为 __imul__。

a = [1, 2, 3]
b = [4, 5, 6]
print("id(a) = %d" % id(a))
a += b
print("id(a) = %d" % id(a))

c = [1, 2, 3]
print("id(c) = %d" % id(c))
c = c + b
print("id(c) = %d" % id(c))

d = (1, 2, 3)
print("id(d) = %d" % id(d))
d *= 2
print("id(d) = %d" % id(d))

运行结果如下:

id(a) = 1298277978824
id(a) = 1298277978824
id(c) = 1298277978696
id(c) = 1298277978632
id(d) = 1298277972872
id(d) = 1298277136616

 

了解了序列的增量赋值,我们来看 Leonardo Rochael 在 2013 年的 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,但其实答案是 D。在控制台运行代码,显示结果如下:

总结:

1、对不可变序列进行重复拼接操作的话,效率会很低,因为每次都要新建一个序列,然后把原来序列中的元素复制到新的序列里,然后再追加新的元素。

2、不要把可变对象放在元组里面。

3、增量赋值不是一个原子操作,我们刚才也看到了,它虽然抛出了异常,但 t 的值还是改变了。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python:序列的增量赋值

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python:序列的增量赋值

增量赋值运算符有 += 和 *=。+= 背后的特殊方法是 __iadd__,如果一个类没有实现 __iadd__ 方法,Python 会退一步调用 __add__ 方法。这两个方法的区别在于,__iadd__ 为就地改动,不会改变原值的内存
2023-01-30

python新增一列并赋值的方法是什么

在Python中,可以通过以下几种方式新增一列并赋值:1. 使用字典赋值:如果已经有一个字典或者DataFrame,可以直接通过字典的方式新增一列,并赋予相应的值。例如:pythondf = {'column1': [1, 2, 3, 4]
2023-10-18

sql如何新增一列并赋值

要在数据库表中新增一列并为该列赋值,可以使用以下SQL语句:ALTER TABLE table_nameADD column_name datatype DEFAULT default_value;其中,table_name是要修改的表
sql如何新增一列并赋值
2024-05-06

oracle怎么增加一列并赋值

要在Oracle中增加一列并赋值,可以使用ALTER TABLE语句。以下是具体步骤:1. 打开Oracle SQL开发工具(如SQL Developer)或登录到Oracle数据库的命令行界面。2. 使用ALTER TABLE语句来添加一
2023-08-31

oracle怎么新增列并赋初值

要在Oracle数据库中新增列并给它赋初值,可以通过以下步骤实现:使用ALTER TABLE语句来添加新列。例如,要在名为table_name的表中添加名为column_name的新列,可以使用以下语句:ALTER TABLE table_
oracle怎么新增列并赋初值
2024-04-23

如何解决序列赋值引发的Python列表陷进

本篇内容主要讲解“如何解决序列赋值引发的Python列表陷进”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决序列赋值引发的Python列表陷进”吧!++是指把两个序列的元素拼接在一起。通常
2023-06-15

python系列(二)python变量赋

博主QQ:819594300博客地址:http://zpf666.blog.51cto.com/有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持!本博文阅读目录:  1、什么是变量?  2、命名规则  3、变量赋值在内存中的原理 
2023-01-31

Python中的变量怎么赋值

这篇文章主要讲解了“Python中的变量怎么赋值”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python中的变量怎么赋值”吧!1 Python变量概述变量,英文叫做 variable。在《
2023-06-22

图解Python变量与赋值

Python是一门独特的语言,与C语言有很大区别,初学Python很多萌新表示对变量与赋值不理解,学过C的都知道,给变量赋值时,需要先指定数据类型,同时会开辟一块内存区域,用于存储值,例如:int a = 1;a 就是内存空间中的一小块区域
2023-01-31

python如何给变量赋值

python可以通过基本的变量赋值、多重赋值、增量赋值、复合赋值运算符和全局变量和局部变量赋值。详细介绍:1、基本的变量赋值步骤是将数字赋给变量,将字符串赋给变量,将布尔值赋给变量,将列表赋给变量;2、多重赋值步骤是交换变量值,从函数返回多
python如何给变量赋值
2023-12-13

python列表切片怎么赋值

要在Python中对列表进行切片并赋值,可以使用以下语法:list_name[start:end] = new_values其中,`list_name`是要进行操作的列表的名称,`start`是要切片的起始位置的索引(包含),`end`
2023-10-24

python中变量的声明和赋值

1、什么是变量?    变量:值会发生变化的的量,与常量相对.2、python支持的变量数据类型:    Python有五个标准的数据类型:1. 数字    2.字符串    3.元组    4.列表    5.字典3、python中的变量
2023-01-31

sql增加一列并赋值数据的方法是什么

在SQL中,可以使用ALTER TABLE语句添加新列并为其赋值数据。具体的语法如下:```ALTER TABLE table_nameADD column_name data_type [DEFAULT value];```其中,tabl
2023-08-23

python用列表实现多重赋值

变量的值和列表中的个数需要相等。否则会出错误。
2023-01-31

python变量和变量赋值的几种形式

动态类型的语言python是动态类型的语言,不需要声明变量的类型。实际上,python中的变量仅仅只是用来保存一个数据对象的地址。无论是什么数据对象,在内存中创建好数据对象之后,都只是把它的地址保存到变量名中。所以变量名是类型无关的,但它指
2023-01-30

python的变量与赋值详细分析

python的变量与赋值1.变量的命名规则 变量其实通过一个标记调用内存中的值,而变量名就是这个标记的名称,但是万一这个标记已经被提前占用或者解释器认为这个标记是不合法的,那么就会报错。下面总结了一下变量的命名规则: 1.不能使用pytho
2022-06-04

python变量赋值的方法有哪些

Python中变量赋值的方法有以下几种:直接赋值:使用等号(=)将一个值赋给变量。例如:x = 5同时赋值:可以同时给多个变量赋值,用逗号分隔。例如:x, y, z = 1, 2, 3多重赋值:可以将一个序列(如列表或元组)的值同时赋给
python变量赋值的方法有哪些
2024-02-29

python列表中的赋值与深浅拷贝

首先创建一个列表a=[[1,2,3],4,5,6]一、赋值a=[[1,2,3],4,5,6]b=aa[0][1]='tom'print(a)print(b)结果:[[1, 'tom', 3], 4, 5, 6][[1, 'tom', 3],
2023-01-30

python怎么降序排列列表的值

使用 python 降序排列列表的值:1. 使用 sort() 函数并传入 reverse=true 参数。2. 使用 reversed() 函数返回反向迭代器。3. 使用切片操作 my_list[::-1]。4. 使用 max() 和 m
python怎么降序排列列表的值
2024-05-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录