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_增量赋值的更多相关文章

  1. Python学习记录day8

    目录 Python学习记录day8 1. 静态方法 2. 类方法 3. 属性方法 4. 类的特殊成员方法 4.1 __doc__表示类的描述信息 4.2 __module__ 和 __class__ ...

  2. Python学习记录day7

    目录 Python学习记录day7 1. 面向过程 VS 面向对象 编程范式 2. 面向对象特性 3. 类的定义.构造函数和公有属性 4. 类的析构函数 5. 类的继承 6. 经典类vs新式类 7. ...

  3. Python学习记录day6

    title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...

  4. Python学习记录day5

    title: Python学习记录day5 tags: python author: Chinge Yang date: 2016-11-26 --- 1.多层装饰器 多层装饰器的原理是,装饰器装饰函 ...

  5. Python学习记录:括号配对检测问题

    Python学习记录:括号配对检测问题 一.问题描述 在练习Python程序题的时候,我遇到了括号配对检测问题. 问题描述:提示用户输入一行字符串,其中可能包括小括号 (),请检查小括号是否配对正确, ...

  6. Python:序列的增量赋值

    增量赋值运算符有 += 和 *=.+= 背后的特殊方法是 __iadd__,如果一个类没有实现 __iadd__ 方法,Python 会退一步调用 __add__ 方法.这两个方法的区别在于,__ia ...

  7. Python学习记录4(语句)

    赋值语句 序列解包 条件语句 语句块 布尔变量 条件执行和if语句 条件运算符 循环 while语句 for循环 迭代工具 跳出循环 break continue while truebreak语句 ...

  8. 实验楼Python学习记录_挑战字符串操作

    自我学习记录 Python3 挑战实验 -- 字符串操作 目标 在/home/shiyanlou/Code创建一个 名为 FindDigits.py 的Python 脚本,请读取一串字符串并且把其中所 ...

  9. 我的Python学习记录

    Python日期时间处理:time模块.datetime模块 Python提供了两个标准日期时间处理模块:--time.datetime模块. 那么,这两个模块的功能有什么相同和共同之处呢? 一般来说 ...

随机推荐

  1. [GoogleBlog]new-approach-to-china

    https://googleblog.blogspot.com/2010/01/new-approach-to-china.html

  2. Miller_Rabbin&&Pollard_Rho 学习笔记

    占坑,待填 I Intro 首先我们考虑这样一个问题 给定一个正整数\(p(p<=1e8)\),请判断它是不是质数 妈妈我会试除法! 于是,我们枚举$ \sqrt p$ 以内的所有数,就可以非常 ...

  3. 应用系统如何分析和获取SQL语句的执行代码

    大部分开发人员都有这样一个需求,在程序连接数据库执行时,有时需要获取具体的执行语句,以便进行相关分析,这次我向大家介绍一下通用权限管理系统提供的SQL语句执行跟踪记录,直接先看看代码吧:(这个功能我也 ...

  4. (双指针) leetcode 485. Max Consecutive Ones

    Given a binary array, find the maximum number of consecutive 1s in this array. Example 1: Input: [1, ...

  5. Vue(小案例_vue+axios仿手机app)_Vuex优化购物车功能

    一.前言         1.用vuex实现加入购物车操作 2.购物车详情页面          3.点击删除按钮,删除购物详情页面里的对应商品 二.主要内容 1.用vuex加入购物车 (1)在src ...

  6. 转载:Linux命令之查看文件占用空间大小-du,df

    转载自:<du命令>-linux命令五分钟系列之三 du(disk usage),顾名思义,查看目录/文件占用空间大小 #查看当前目录下的所有目录以及子目录的大小$ du -h $ du ...

  7. sed命令(二)

    转自:https://www.cnblogs.com/maxincai/p/5146338.html sed命令用法 sed是一种流编辑器,它是文本处理中非常有用的工具,能够完美的配合正则表达式使用, ...

  8. 谈谈JAVA中的安全发布

    谈谈JAVA中的安全发布 昨天看到一篇文章阐述技术类资料的"等级",看完之后很有共鸣.再加上最近在工作中越发觉得线程安全性的重要性和难以捉摸,又掏出了<Java并发编程实战& ...

  9. [C++]UVaLive7324 ASCII Addtion

    Description Nowadays, there are smartphone applications that instantly translate text and even solve ...

  10. GDB程序调试工具

    GDB程序调试工具 GDB主要完成下面三个方面的功能: 启动被调试程序 让被调试程序在指定的位置停住 当程序被停住时,可以检查程序状态 GDB快速入门 编译生成可执行文件 gcc -g test.c ...