预知小知识:
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过程可变参数类型是不行的)