Python赋值机制与多种语法形式详解

洛溪
洛溪
发布时间:2026-10-16| 8人浏览过
原创

本文深入解析Python中赋值的本质:变量名与对象的关联而非复制。详细对比C++与Python的差异,并系统介绍基础赋值、元组与列表解包、扩展序列解包、多目标赋值及增强赋值等语法形式,结合代码示例说明变量交换等实际应用。

Python中赋值的含义

在C++等语言中,变量通常直接代表对象本身,对变量进行赋值操作即修改该对象的内容。

而在Python中,赋值的本质是将变量名与具体的对象实例建立关联,即变量指向了该对象。当对变量再次执行赋值操作时,原对象并不会被修改(其引用计数会减1),而是变量转而指向了新的对象。

这一机制导致了一个重要后果:当多个变量指向同一个可变对象时,通过其中一个变量修改对象内容,其他指向同一对象的变量也会观察到相同的变化。

下面的代码清楚地显示了这一点:

>>> a = [0, 1, 2, 3]
>>> b = a
>>> a
[0, 1, 2, 3]
>>> b
[0, 1, 2, 3]
>>> a[0] = 99
>>> a
[99, 1, 2, 3]
>>> b
[99, 1, 2, 3]
>>> a = [5, 6, 7, 8]
>>> a
[5, 6, 7, 8]
>>> b
[99, 1, 2, 3]      

Python赋值语句的多种形式

Python语言具有许多独特之处,入门容易但精通需要深入理解其背后复杂的实现机制。本文以Python赋值语句的多种表现形式为例进行说明。

赋值语句的特性

赋值语句创建的是对象引用,而非对象的副本;

变量在首次被赋值时自动创建,无需提前声明变量名;

变量在参与运算或引用前必须先完成赋值;

执行隐式赋值的一些操作包括:模块导入、函数和类的定义、函数参数传递以及for循环中的变量绑定。

运算

解释

spam = 'Spam'

基础(basic)形式

spam, ham = 'yum', 'YUM'

元组赋值(基于位置)

[spam, ham] = ['yun', 'YUM']

列表赋值(基于位置)

a, b, c, d = 'Spam'

推广的(generalized)序列赋值

a, *b = 'Spam'

扩展序列解包(Unpacking:解包、拆包)

spam = ham = 'lunch'

多目标(multiple target)赋值

spam += 42

增强(augmented)赋值

上表取自《Python学习手册》表 11-1

基础(basic)形式

这是最常见的赋值方式,例如:

a=123

元组赋值(元组解包赋值)

a, b, c= 1, 2, "john"

该形式等同于 (a, b, c) = (1, 2, "john")

整型对象1和2分别分配给变量a和b,字符串对象"john"分配给变量c。在元组赋值中,括号可以省略。

这也是一种无需创建临时变量即可交换两个变量值的方法,详见后文“Python中交换两个变量的值”中的法二。

列表赋值(列表解包赋值)

[x, y, z] = [10, 20, 30]

推广的(generalized)序列赋值

可以将多个对象分配给多个变量。任何序列或其他可迭代对象都可以赋值给长度相同的名称序列。例如:

a, b, c = 'xyz'

参见下图:

扩展序列解包(Extended sequence unpacking)

带有星号前缀的变量名可以收集未被匹配的元素项。例如:

a, *b, c = [1, 2, 3, 4]

参见下图:

多目标(multiple target)赋值

Python允许同时为多个变量赋值。例如:

a = b = c = 2

以上实例中,创建一个整型对象,值为2,三个变量被分配到相同的内存空间上。

增强(augmented)赋值

除+=外,还有-=、*=、/=、%=、**=、//=

【简要说明】

运算符

描述

功效

+=

加法赋值运算符

c += a 等效于 c = c + a

-=

减法赋值运算符

c -= a 等效于 c = c - a

*=

乘法赋值运算符

c *= a 等效于 c = c * a

/=

除法赋值运算符

c /= a 等效于 c = c / a

%=

取模赋值运算符

c %= a 等效于 c = c % a

**=

幂赋值运算符

c **= a 等效于 c = c ** a

//=

取整除赋值运算符

c //= a 等效于 c = c // a

Python中交换两个变量的值

假设

x = 10

y = 20

法一: 创建临时变量,并交换

使用临时变量temp,将x的值存储在temp变量中,接着将y值赋给x,最后将temp赋值给y变量。

temp = x

x = y

y = temp

法二:不使用临时变量,python特有的,利用元组赋值

x, y = y, x

以上为个人经验,希望能给大家一个参考,也希望大家多多支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。