python学习记录20190122_增量赋值
python中的增量赋值
一,在python中a=a+b和a+=b有区别吗
**1,对可变的数据类型
a=[1,2,3]
print(id(a)) #1602469350792
b=[4,5]
a=a+b
print(a,id(a)) #[1, 2, 3, 4, 5] 1602469421512
a=[1,2,3]
print(id(a)) #1736417136008
b=[4,5]
a += b
print(a,id(a)) #[1, 2, 3, 4, 5] 1736417136008
对可变数据类型,a= a+b 和 a+=b 他们得到的新的列表的元素是一致的,但是他们的内存地址,增量赋值的和原列表a的一致,普通赋值的不一致。
---------------------
2,对不可变数据类型
a=(1,2,3)
print(id(a)) #2352934763832
b=(3,4)
a=a+b
print(a,id(a)) #(1, 2, 3, 3, 4) 2352934103616
a=(1,2,3)
print(id(a)) #2128999628088
b=(3,4)
a+=b
print(a,id(a)) #(1, 2, 3, 3, 4) 2128998967872
对不可变数据类型,a= a+b 和 a+=b 他们得到的新的列表的元素是一致的,他们的内存地址也都和原列表不一致。
---------------------
二,出现这样的现象的原因
+=调用的是iadd方法,此方法是就地加法。
当类的内部有iadd方法的时候,遇到+=会优先调用此方法,没有的时候,会退而求其次,调用add方法。
对列表而言,a +=b就相当于a.extend(b)。
print("__iadd__" in dir(list)) #True
print("__add__" in dir(list)) #True
print("__iadd__" in dir(tuple)) #False
print("__add__" in dir(tuple)) #True
---------------------
python学习记录20190122_增量赋值的更多相关文章
- Python学习记录day8
目录 Python学习记录day8 1. 静态方法 2. 类方法 3. 属性方法 4. 类的特殊成员方法 4.1 __doc__表示类的描述信息 4.2 __module__ 和 __class__ ...
- Python学习记录day7
目录 Python学习记录day7 1. 面向过程 VS 面向对象 编程范式 2. 面向对象特性 3. 类的定义.构造函数和公有属性 4. 类的析构函数 5. 类的继承 6. 经典类vs新式类 7. ...
- Python学习记录day6
title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...
- Python学习记录day5
title: Python学习记录day5 tags: python author: Chinge Yang date: 2016-11-26 --- 1.多层装饰器 多层装饰器的原理是,装饰器装饰函 ...
- Python学习记录:括号配对检测问题
Python学习记录:括号配对检测问题 一.问题描述 在练习Python程序题的时候,我遇到了括号配对检测问题. 问题描述:提示用户输入一行字符串,其中可能包括小括号 (),请检查小括号是否配对正确, ...
- Python:序列的增量赋值
增量赋值运算符有 += 和 *=.+= 背后的特殊方法是 __iadd__,如果一个类没有实现 __iadd__ 方法,Python 会退一步调用 __add__ 方法.这两个方法的区别在于,__ia ...
- Python学习记录4(语句)
赋值语句 序列解包 条件语句 语句块 布尔变量 条件执行和if语句 条件运算符 循环 while语句 for循环 迭代工具 跳出循环 break continue while truebreak语句 ...
- 实验楼Python学习记录_挑战字符串操作
自我学习记录 Python3 挑战实验 -- 字符串操作 目标 在/home/shiyanlou/Code创建一个 名为 FindDigits.py 的Python 脚本,请读取一串字符串并且把其中所 ...
- 我的Python学习记录
Python日期时间处理:time模块.datetime模块 Python提供了两个标准日期时间处理模块:--time.datetime模块. 那么,这两个模块的功能有什么相同和共同之处呢? 一般来说 ...
随机推荐
- Activiti6-IdentityService(学习笔记)
IdentityService并不依赖我们的流程部署文件,所以 直接放使用方法的测试代码了: public class IdentityServiceTest { private static fin ...
- newCachedThreadPool 的使用
newCachedThreadPool的线程池特点: (1)它是一个可以无限扩大的线程池:它比较适合处理执行时间比较小的任务:corePoolSize为0,maximumPoolSize为无限大,意味 ...
- React Native & ES6 & emoji
React Native & ES6 & emoji && 逻辑运算符 https://developer.mozilla.org/zh-CN/docs/Web/Jav ...
- FWT(快速沃尔什变换)小结
在多项式卷积的处理中,我们实际上实现的是下面的一个式子 \[ C_k=\sum_{i+j=k}A_iB_j \] 然而事实上有些和(sang)蔼(xin)可(bing)亲(kuang)的出题人,并不会 ...
- 学习STM32F769DK-OTA例程之APP中断向量表重映射
2019-04-17 [小记] APP的IAR工程中的中断向量表偏移是在系统库中的 __iar_program_start 处实现的 启动代码 stm32f769xx.s ;;;;;;;;;;;;;; ...
- pytest 14 使用自定义标记mark
标记失败用到的情况是,本身就知道这是失败的例子,所以,不用让他运行,直接跳过.或者是依赖于某个方法,某个方式失败的话,用例直接标记成失败. 标记失败有两种方法,一种是方法内部,一种是方法外部.内部用p ...
- mysq建表参数设置
建表的完整性约束: not null 与 default unique primary auto_increment foreign key 外键的变种 三种关系 一.介绍 约束条件与数据类型的宽度 ...
- redis5.0.3单实例简单安装记录
redis5.0.3单实例简单安装记录 日常需要测试使用,索性记录下来,免得临时又麻烦的找资料. yum -y install make gcc-c++ cmake bison-devel ncurs ...
- Money King【题解】
我又傻了……竟然忘了区别大根堆和小根堆的性质,以至于一个符号打错,debug了半天……(我真是太菜了……) 题目描述 Once in a forest, there lived N aggressiv ...
- 【JS】JavaScript 指定日期增加天数
指定某个日期(字符串),增加n天后,输出日期字符串,格式:年-月-日: /** * [dateAddDays 从某个日期增加n天后的日期] * @param {[string]} dateStr [日 ...