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模块. 那么,这两个模块的功能有什么相同和共同之处呢? 一般来说 ...
随机推荐
- Python——模块——配置模块(ConfigParser)
一.读取 read(filename) 直接读取ini文件内容 sections() 得到所有的section,并以列表的形式返回 options(section) 得到该section的所有opt ...
- springdata 一对多配置
- oracle篇 之 排序、限制查询行
第二章:排序.限制查询行 一.order by子句 1.order by排序规则 (1)asc,升序排列,默认取值 (2)desc,降序排列 (3)order by是select命令的最后一个子句 s ...
- Stars project
说明:收藏一些比较好的开源项目 Python实现了所有的排序算法 Github:https://github.com/TheAlgorithms/Python 该项目用Python实现了所有的排序算法 ...
- calico客户端工具calicoctl
工具介绍: Calico的二进制程序文件calicoctl可以直接操作Calico存储来查看,修改或配置Calico系统特性. 三种方式部署calicoctl:①二进制安装:②docker安装:③运行 ...
- IIS搭建校内小站
背景 在学校读书最大的烦恼是去机房忘了带作业,或者带了U盘传文件又很容易丢,或者的或者用学校内网网盘又容易忘了上传. 所以笔者搞了个办法. IIS准备工作 win+pause break 打开控制面板 ...
- SpringBoot+thymeleaf+security+vue搭建后台框架 基础篇(一)
刚刚接触SpringBoot,说说踩过的坑,主要的还是要记录下来,供以后反省反省! 今天主要讲讲 thymeleaf+security 的搭建,SpringBoot的项目搭建应该比较简单,这里就不多说 ...
- IOC的理解(转载)
转载自:https://www.zhihu.com/question/23277575/answer/169698662 要了解控制反转( Inversion of Control ), 我觉得有必要 ...
- 如何优雅地用Redis实现分布式锁?
转: 如何优雅地用Redis实现分布式锁? BaiduSpring 01-2500:01 什么是分布式锁 在学习Java多线程编程的时候,锁是一个很重要也很基础的概念,锁可以看成是多线程情况下访问 ...
- Linux 内核文档翻译 - kobject.txt
原文地址:Linux 内核文档翻译 - kobject.txt 作者:qh997 Everything you never wanted to know about kobjects, ksets, ...