Python中的xxx+=xxx和xxx=xxx+xxx一些区别及执行过程
2024-10-20 20:56:52
预知小知识:
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过程可变参数类型是不行的)
最新文章
- 使用Masstransit开发基于消息传递的分布式应用
- Sort the Array
- 黄聪:get_posts 函数 | wordpress
- 将PL/SQL代码封装在机灵的包中
- java synchronized使用
- 【ASP.NET Web API教程】5.1 HTTP消息处理器
- Unable to start activity异常的解决方案
- ESP8266使用详解--基于Lua脚本语言
- Selenium的简单安装和使用
- 转:【Java并发编程】之二十二:并发新特性—障碍器CyclicBarrier(含代码)
- spring boot https --restful接口篇
- [UOJ UR #4追击圣诞老人]
- CMD远程连接服务器上的MySQL
- SP283 NAPTIME - Naptime
- 牛客网 223C 区区区间间间(单调栈)
- MVC,MVP和MVVM三种开发模式
- [JS] ECMAScript 6 - Variable : compare with c#
- js基础学习笔记(一)
- 解决Win10无法安装.Net Framework 3.5,错误代码0x800F081F
- scss 覆盖 原有变量