Python 教程之运算符(12)a += b 并不总是等价于 a = a + b

简介: Python 教程之运算符(12)a += b 并不总是等价于 a = a + b

在 Python 中 a += b 的行为方式并不总是与 a = a + b 相同,相同的操作数在不同的条件下可能会给出不同的结果。但要了解它们为何表现出不同的行为,您必须深入研究变量的工作原理。

所以首先,你需要知道幕后发生了什么。

创建新变量:

a = 10
print(" id of a : ", id(10) ," Value : ", a )

输出 :

id of a :  11094592  Value :  10

在上面的示例中,值 10 被存储在内存中,并且它的引用被分配给 a。

修改变量:

a = 10 # 为变量赋值创建新对象
print(" id of a : ", id(a) ," Value : ", a )
a = a + 10 # 修改变量的值创建新对象
print(" id of a : ", id(a) ," Value : ", a )
a += 10 # Modifying value of variable creats new object
print(" id of a : ", id(a) ," Value : ", a )

输出 :

id of a :  11094592  Value :  10
id of a :  11094912  Value :  20
id of a :  11095232  Value :  30

每当我们创建或修改 int、float、char、string 时,它们都会创建新对象并将新创建的引用分配给它们各自的变量。

但是列表中没有看到相同的行为

a = [0, 1] # 将此数组存储在内存中并将其引用分配给a
print("id of a: ",id(a) , "Value : ", a )
a = a + [2, 3] # 这也将在内存中表现相同的存储数据并将 ref 分配给变量
print("id of a: ",id(a) , "Value : ", a )
a += [4, 5]
print("id of a: ",id(a) , "Value : ", a )
#但是现在这将创建新的参考。 相反,这将修改当前对象,因此指向 a 的所有其他变量也将得到更改

输出:

id of a:  140266311673864 Value :  [0, 1]
id of a:  140266311673608 Value :  [0, 1, 2, 3]
id of a:  140266311673608 Value :  [0, 1, 2, 3, 4, 5]

此时您可以看到 a = a + b 与 a += b 有时不同的原因。

考虑这些列表操作示例:

示例 1:

list1 = [5, 4, 3, 2, 1]
list2 = list1
list1 += [1, 2, 3, 4] # 修改当前参考值
print(list1)
print(list2) # 与第 4 行一样,它修改值而不创建指向 list1 的新对象变量 list2 得到更改

输出:

[5, 4, 3, 2, 1, 1, 2, 3, 4] 
[5, 4, 3, 2, 1, 1, 2, 3, 4]

image.png

示例 2

list1 = [5, 4, 3, 2, 1]
list2 = list1
list1 = list1 + [1, 2, 3, 4]
# list1 的内容与上述程序相同,但 list2 的内容不同。
print(list1)
print(list2)

输出:

[5, 4, 3, 2, 1, 1, 2, 3, 4] 
[5, 4, 3, 2, 1]

image.png

  • 表达式list1 += [1, 2, 3, 4] 就地修改列表,这意味着它扩展了列表,使得“list1”和“list2”仍然具有对同一个列表的引用。
  • 表达式list1 = list1 + [1, 2, 3, 4] 创建一个新列表并将“list1”引用更改为该新列表,“list2”仍引用旧列表。


目录
相关文章
|
3天前
|
机器学习/深度学习 自然语言处理 PyTorch
使用Python实现循环神经网络(RNN)的博客教程
使用Python实现循环神经网络(RNN)的博客教程
23 1
|
1天前
|
Python
【Python操作基础】——运算符
【Python操作基础】——运算符
|
4天前
|
人工智能 IDE 开发工具
python环境安装教程
python环境安装教程
20 0
|
4天前
|
数据采集 iOS开发 MacOS
Python及Pycharm安装教程
Python及Pycharm安装教程
17 0
|
5天前
|
机器学习/深度学习 算法 Python
深入浅出Python机器学习:从零开始的SVM教程/厾罗
深入浅出Python机器学习:从零开始的SVM教程/厾罗
|
6天前
|
算法 机器人 Python
Python实现教程:平面最短路径算法
Python实现教程:平面最短路径算法
13 1
|
13天前
|
Linux Python Windows
Python更换国内pip源详细教程
Python更换国内pip源详细教程
|
13天前
|
Linux Python Windows
Python虚拟环境virtualenv安装保姆级教程(Windows和linux)
Python虚拟环境virtualenv安装保姆级教程(Windows和linux)
|
2月前
|
存储 安全 API
【Python 基础教程 21】Python3 文件操作全面指南:从入门到精通的综合教程
【Python 基础教程 21】Python3 文件操作全面指南:从入门到精通的综合教程
92 0
|
2月前
|
存储 算法 数据挖掘
【Python 基础教程 25】全面入门指南:深度解析Python3的命名空间,作用域及变量使用教程
【Python 基础教程 25】全面入门指南:深度解析Python3的命名空间,作用域及变量使用教程
65 0