Python中的xxx+=xxx和xxx=xxx+xxx一些区别及执行过程
预知小知识:
Python中的变量与其他语言稍有差异,如a = 10并不是直接在内存中创建一个变量a其值为10,而是在内存中创建一个a这个a指向这个10,在Python中所有牵扯到等号的均不是值赋值,全都是引用(C的小伙伴可以大致理解为处处是指针)。
示例代码:
>>> a = 10
>>> b = 10
>>> id(a)
1686269232
>>> id(b)
1686269232
以上可以看到变量只要赋值一致,他们在本机中的内存地址都一样。
+=示例代码:
# coding:utf-8
num = [88]
def demo(nums):
nums += nums # 将nums指向的这个地址中的[88]和[88]进行合并
print(nums) # 两个列表合并将会得到[88, 88]
demo(num)
print(num) # 因为是引用类型num所指向的值已发生改变这里也会得到[88, 88]
pycharm中执行结果:
[88, 88]
[88, 88]
# coding:utf-8
num = [88]
def demo(nums):
nums = nums + nums # 将nums所指向的[88]和[88]合并让demo中的零时变量nums重新指向[88, 88]
print(nums) # 这里会输出新的指向结果[88, 88]
demo(num)
print(num) # demo中的nums为零时指向所以不会影响num的值
pycharm中执行结果:
[88, 88]
[88]
总结:
虽然我们常使用xxx+=xxx或xxx=xxx+xxx得到的结果基本是一致的,但是底层执行还是有一些差异的,所以xxx+=xxx不完全等价于xxx=xxx+xxx。
小知识:
python的值类型和引用类型
值类型:
包含:字符串、元组、数值,本身不允许被修改
引用类型:
包含:列表、字典,本身允许修改(不能作用于字典的key,因为会进行一个hash过程可变参数类型是不行的)
Python中的xxx+=xxx和xxx=xxx+xxx一些区别及执行过程的更多相关文章
- Python中内置数据类型list,tuple,dict,set的区别和用法
Python中内置数据类型list,tuple,dict,set的区别和用法 Python语言简洁明了,可以用较少的代码实现同样的功能.这其中Python的四个内置数据类型功不可没,他们即是list, ...
- Python中列表,元组,字典,集合的区别
参考文档https://blog.csdn.net/Yeoman92/article/details/56289287 理解Python中列表,元组,字典,集合的区别 列表,元组,字典,集合的区别是p ...
- Python中read()、readline()和readlines()三者间的区别和用法
2019-01-15 10:48:43 前言 众所周知在python中读取文件常用的三种方法:read(),readline(),readlines(),今天看项目是又忘记他们的区别了.以前看书的时候 ...
- Python中的None与Null(空字符)的区别
参考自 Python中的None与空字符(NULL)的区别 - CSDN博客 http://blog.csdn.net/crisschan/article/details/70312764 首先了解p ...
- Python中的 x+=x 与 x = x + x的区别
对于Python中的可变数据类型(列表,字典)来说,+= 和 ..=..+..是不同的 加等是直接在变量的值上面进行操作,会修改了原来变量的值 先等后加会重新分配一个内存空间,不会再原有的变量值上面进 ...
- 关于Python中的可变对象与不可变对象的区别(转)
转自:https://blog.csdn.net/rookinzhang/article/details/80259857 Python中可变对象和不可变对象:https://www.cnblogs. ...
- python中a, b = a, a + b这条语句是如何执行的?
a,b=b,a+b,这条语句在"理解"上还是与C语言有些差别的.在Python中,可以做下面的方式理解:首先,把等号右边的算式分别算完再说,然后按照一一对应的关系把值赋给等号左边的 ...
- 在C#中调用Python中遇到的坑(No module named xxx)
例如Python的代码是这个样子的. # coding=<utf-> # -*- coding: utf- *- import requests import urllib def Cle ...
- Python中正则匹配使用findall,捕获分组(xxx)和非捕获分组(?:xxx)的差异
转自:https://blog.csdn.net/qq_42739440/article/details/81117919 下面是我在用findall匹配字符串时遇到的一个坑,分享出来供大家跳坑. 例 ...
随机推荐
- tidb调研
TiDB是新一代开源分布式 NewSQL 数据库,相比较于我们常见的数据库MySQL,TiDB具有水平伸缩.强一致性的分布式事务.基于 Raft 算法的多副本复制等特性.同时,TiDB兼容MySQL生 ...
- netty长链接保存方案
架构 client router server zk redis 对于router: 保存客户端和服务器对 redis clientid : serverip & port 对于server ...
- mysql 案例 ~ mysql字符集详解
一 谈谈mysql常见的字符集问题 二 字符集统一 1 character_set_server 2 character_set_client 3 java/php等连接字符集 4 chara ...
- mongodb 案例 ~ 经典故障案例
一 简介:此文汇总遇到过和搜集过的故障案例 二 场景案例 1 问题描述: mongo集群在无任何业务情况下,mongos所在服务器cpu突然被打满,内核日志报错 mongos被hung住,非常奇怪的问 ...
- C实战:项目构建Make,Automake,CMake【转】
转自:https://blog.csdn.net/dc_726/article/details/48978849 版权声明:本文为博主原创文章,未经博主允许不得转载.欢迎访问 http://blog. ...
- MongoDB与MySQL的插入、查询性能测试
1.1 MongoDB的简单介绍 在当今的数据库市场上,MySQL无疑是占有一席之地的.作为一个开源的关系型数据库,MySQL被大量应用在各大网站后台中,承担着信息存储的重要作用.2009年,甲骨文 ...
- queue之#单向消息队列
import queue q = queue.Queue() #创建一个单项队列qsize 查看这个单项队列元素的个数empty 与 clear功能是一样的full 是用来查看这个队列是否填满了,队列 ...
- 030_CORS深究
在日常的项目开发时会不可避免的需要进行跨域操作,而在实际进行跨域请求时,经常会遇到类似 No 'Access-Control-Allow-Origin' header is present on th ...
- Java二维码生成与解码
基于google zxing 的Java二维码生成与解码 一.添加Maven依赖(解码时需要上传二维码图片,所以需要依赖文件上传包) <!-- google二维码工具 --> &l ...
- webstorm2017.3最新激活教程(激活码、注册码)亲测成功
1 前言 webstorm2017.3最新激活教程(旧版本可用,亲测成功,有疑问随时联系),20180411测试成功,还是注册机靠谱~ 2 下载地址 链接: https://pan.baidu.com ...