python中a=a+1与a+=1的区别
时间:2019-04-18
本文章向大家介绍python中a=a+1与a+=1的区别,主要包括python中a=a+1与a+=1的区别使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1、a=a+2,表示一个新的对象,新的对象名字还是a,但是指向的内存地址已经变了
>>> a=2 >>> id(a) 140406287260016 >>> a=a+2 >>> a 4 >>> id(a) 140406287259968
所以对于tuple对象(不可变对象),也是可以这样操作的
>>> tuple1=(1,2) >>> id(tuple1) 4521580448 >>> tuple1=tuple1+(3,) >>> tuple1 (1, 2, 3) >>> id(tuple1) 4521658880
2、a+=2对于有些对象的操作是表示原来的对象,对有些对象的操作是生成了一个新对象
不可变对象tuple1,操作完后,内存地址已经发生变化,生成一个新的对象
>>> tuple1=(1,2) >>> type(tuple1) <type 'tuple'> >>> tuple1+=(3,) >>> id(tuple1) 4521658880 >>> tuple1+=(4,5) >>> id(tuple1) 4520649072
而list对象,可变对象,+=操作、append操作、extend操作,都是在原对象上操作
>>> list1=[1,2] >>> id(list1) 4521614656 >>> list1+=[3] >>> id(list1) 4521614656 >>> list1.append(4) >>> id(list1) 4521614656 >>> list1.extend(5) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'int' object is not iterable >>> list1.extend([5]) >>> id(list1) 4521614656 >>>
3、
x = [1,2,3] print "before func(), global! x = ",x,"id(x) = ",id(x) def func(): global x print "in func(), local! original x = ",x,"id(x) = ",id(x) x = x + [1] print "in func(), local! now x = ",x,"id(x) = ",id(x) func() print "after func(), global! x = ",x,"id(x) = ",id(x) 结果: [python] view plain copy before func(), global! x = [1, 2, 3] id(x) = 47781768 in func(), local! original x = [1, 2, 3] id(x) = 47781768 in func(), local! now x = [1, 2, 3, 1] id(x) = 47795720 after func(), global! x = [1, 2, 3, 1] id(x) = 47795720
global就保证了,即使我的变量x在函数中指向对象变了,外部的x也会指向新的对象
x = [1,2,3] print "before func(), global! x = ",x,"id(x) = ",id(x) def func(x): print "in func(), local! original x = ",x,"id(x) = ",id(x) x = x + [1] print "in func(), local! now x = ",x,"id(x) = ",id(x) func(x) print "after func(), global! x = ",x,"id(x) = ",id(x) 结果: before func(), global! x = [1, 2, 3] id(x) = 46339976 in func(), local! original x = [1, 2, 3] id(x) = 46339976 in func(), local! now x = [1, 2, 3, 1] id(x) = 46390664 after func(), global! x = [1, 2, 3] id(x) = 46339976
x = x + [1],是新建了一个对象,id(x) = 46390664
利用id(x),查看下x += [1]对象是怎么变化的吧: x = [1,2,3] print "before func(), global! x = ",x,"id(x) = ",id(x) def func(x): print "in func(), local! original x = ",x,"id(x) = ",id(x) x += [1] print "in func(), local! now x = ",x,"id(x) = ",id(x) func(x) print "after func(), global! x = ",x,"id(x) = ",id(x) 结果: before func(), global! x = [1, 2, 3] id(x) = 46536584 in func(), local! original x = [1, 2, 3] id(x) = 46536584 in func(), local! now x = [1, 2, 3, 1] id(x) = 46536584 after func(), global! x = [1, 2, 3, 1] id(x) = 46536584
id(x)全程一样,x += [1],python直接就在原对象上操作
- 源码解读ODL的MAC地址学习(二)
- SpringBoot开发案例之整合Spring-data-jpa进阶篇
- SpringBoot开发案例之微信小程序录音上传
- SpringBoot开发案例之微信小程序文件上传
- SpringBoot开发案例之配置静态资源文件路径
- 源码解读ODL的MAC地址学习(一)
- SpringBoot开发案例之配置Druid数据库连接池
- SpringBoot开发案例之mail中文附件乱码
- SpringBoot开发案例之整合Swagger篇
- SpringBoot开发案例之整合mail队列进阶篇
- SpringBoot开发案例之集成SSL证书
- SpringBoot开发案例之整合mail队列篇
- SpringBoot开发案例之整合日志管理
- SpringBoot开发案例之奇技淫巧
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Go寻找最长回文字符串——中心扩展法
- Spring高级技术应用——百战商城实现(上)
- 基于Springboot+jpa+thymeleaf+rabbit+SpringBoot mail 的简单项目
- 【go】剑指offer: 删除链表结点O(1)时间复杂度
- Go快速查找有序二维数组的数字
- Go寻找数组中最小的k个数——全部排序和部分排序
- Spring高级技术应用——百战商城实现(下)
- Go 字符串反转问题解决思路
- 剑指offer:go实现从尾到头打印链表
- 【go】剑指offer:3种方法寻找二进制1的个数
- 高并发技术
- Working with Errors in Go 1.13
- Hadoop技术(二)资源管理器YARN和分布式计算框架MapReduce
- CDH——Cloudera’s Distribution Including Apache Hadoop
- 【go】剑指offer:用26个英文字母组合表示列数