Python参数传递机制:引用与可变对象详解

Luna
Luna
发布时间:2026-10-13| 6人浏览过
原创

本文深入解析Python中参数传递的引用机制。通过列表和类继承两个实例,说明形参与实参共享内存地址时的行为差异。重点区分对变量重新赋值与修改对象内容的不同后果,帮助开发者理解可变对象在函数调用中的引用传递特性。

Python对象引用机制概述

在Python中,万物皆对象。变量本身并不具备类型属性,它仅仅是对具体对象的引用。当我们使用type()等函数检测变量类型时,实际上检测的是该变量所引用的对象的类型。

函数参数传递实例分析

Python采用传递对象引用的方式处理参数。为了清晰说明这一机制,我们观察以下示例:


test = [1]
def change1(a):
  a = [2]

def change2(a):
  a.append(3)

change1(test)
change2(test)
print test

观察最终的输出结果:

[1, 3]

部分读者可能会疑惑,结果为何不是[2, 3]?请继续阅读后续分析。

核心结论:函数传递的是对象的引用。

在change1(test)调用中,形参a与实参test指向同一块内存区域。当在函数内部执行a = [2]时,a被重新绑定到存放[2]的新内存空间,而test的指向并未改变,仍指向原内存。随后调用change2(test),由于test仍指向原列表对象,a.append(3)直接修改了该内存空间中的值,从而得到最终结果。

类继承中的引用行为

为进一步巩固理解,引入一个涉及类继承的示例:


class Parent(object):
	x = 1
​ class Child1(Parent):
	pass
​ class Child2(Parent):
	pass
​ print Parent.x, Child1.x, Child2.x
Child1.x = 2
​ print Parent.x, Child1.x, Child2.x
Parent.x = 3
​ print Parent.x, Child1.x, Child2.x​
输出结果为:
1 1 1
1 2 1
3 2 3

在继承结构中,子类Child1和Child2初始时引用父类Parent中x对象的存储空间。当执行Child1.x = 2后,Child1中的x单独指向了新的存储空间,而Parent和Child2仍引用原空间。这种引用关系的独立变化导致最终输出结果符合预期。

以上内容涵盖了Python参数传递的核心要点,希望能为读者提供清晰的技术参考。

相关标签:

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

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 算法库。