源本科技 | 码上会

Python 变量

2026/01/16
6
0

学习目标

  • 理解 Python 变量的本质:对象引用机制

  • 掌握变量命名的规则与最佳实践

  • 熟练使用单值、多值赋值及动态类型特性

  • 学会进行类型转换并判断变量类型

  • 了解变量删除与内存管理的基本原理


什么是变量

在 Python 中,变量是用于存储数据的标识符。它本质上是一个指向对象的引用,而非直接包含数据本身。

Python 是动态类型语言,无需声明变量类型,解释器会根据赋值内容自动推断类型。

x = 5
name = "Samantha"
print(x)
print(name)

输出:

5
Samantha

注意:x 并不“等于”5,而是引用了值为 5 的整数对象。


变量命名规则

要创建合法的变量名,必须遵守以下规则:

  • 只能包含 字母(a–z, A–Z)、数字(0–9)和下划线(_)

  • 不能以数字开头

  • 区分大小写myVarmyvar 是两个不同变量)

  • 不能使用 Python 关键字(如 if, else, for, class 等)

合法变量名示例

age = 21
_colour = "淡紫色"
total_score = 90
user_name = "张三"

非法变量名示例

1name = "Error"     # 以数字开头
class = 10          # 'class' 是保留关键字
user-name = "Doe"   # 包含连字符(-)

建议:使用小写字母加下划线的命名风格(snake_case),如 student_id,这是 Python 社区推荐的 PEP 8 规范。


变量赋值方式

1. 基本赋值

使用 = 运算符将值绑定到变量:

x = 5        # 整数
y = 3.14     # 浮点数
z = "你好"    # 字符串

2. 动态类型

同一个变量可以在程序运行过程中引用不同类型的数据:

x = 10           # x 引用整数对象
x = "现在是字符串"  # x 现在引用字符串对象
print(x)         # 输出:现在是字符串

3. 多变量赋值

同值赋值(链式赋值)

a = b = c = 100
print(a, b, c)  # 输出:100 100 100

注意:对于可变对象(如列表),这种赋值会导致多个变量共享同一对象,修改一个会影响其他变量。

多值赋值(解包赋值)

x, y, z = 1, 2.5, "Python"
print(x, y, z)  # 输出:1 2.5 Python

此特性常用于交换变量值:

a, b = 5, 10
a, b = b, a
print(a, b)  # 输出:10 5

类型转换

虽然 Python 自动处理类型,但有时我们需要显式转换数据类型。

函数

作用

示例

int()

转换为整数

int("10") → 10

float()

转换为浮点数

float(5) → 5.0

str()

转换为字符串

str(25) → "25"

s = "10"
n = int(s)        # 字符串 → 整数

cnt = 5
f = float(cnt)    # 整数 → 浮点数

age = 25
s2 = str(age)     # 整数 → 字符串

print(n)   # 10
print(f)   # 5.0
print(s2)  # "25"

若转换不兼容(如 int("abc")),会抛出 ValueError


查看变量类型

使用内置函数 type() 可获取变量所引用对象的类型:

n = 42
f = 3.14
s = "Hello"
li = [1, 2, 3]
d = {'key': 'value'}
flag = True

print(type(n))    # <class 'int'>
print(type(f))    # <class 'float'>
print(type(s))    # <class 'str'>
print(type(li))   # <class 'list'>
print(type(d))    # <class 'dict'>
print(type(flag)) # <class 'bool'>

对象引用机制

Python 中的变量不存储数据本身,而是存储对对象的引用

x = 5      # 创建整数对象 5,x 指向它
y = x      # y 也指向同一个对象 5(共享引用)

此时,xy 都引用同一个整数对象。

x = "CodeMaster"  # 创建新字符串对象,x 指向它
# y 仍指向原来的 5

随后:

y = "Computer"    # y 指向新的字符串对象
# 原来的整数对象 5 不再被引用,将被垃圾回收

关键点:重新赋值不会影响其他变量,因为只是改变了引用目标。


删除变量

使用 del 语句可从当前命名空间中移除变量:

x = 10
del x
print(x)  # 报错!

错误信息:

NameError: name 'x' is not defined

del x 并不立即释放内存,而是解除变量名与对象的绑定。当对象没有任何引用时,Python 的垃圾回收机制会自动回收其内存。


实用示例

1. 交换两个变量

无需临时变量

a, b = 5, 10
a, b = b, a
print(a, b)  # 输出:10 5

2. 获取字符串长度并赋值

word = "Python"
length = len(word)
print("单词长度为:", length)  # 输出:单词长度为: 6

重点总结

  • Python 变量是对象的引用,不是容器。

  • 命名需遵循规则:字母、数字、下划线,不以数字开头,不使用关键字。

  • 支持动态类型、多变量赋值、链式赋值。

  • 类型转换使用 int(), float(), str() 等函数。

  • type() 用于检查变量类型。

  • del 删除的是变量名,而非对象本身;对象由垃圾回收机制管理。

  • 多变量赋值和交换是 Python 的简洁特性,应善加利用。


思考题

  1. 执行以下代码后,ab 是否引用同一个列表对象?为什么?

    a = [1, 2, 3]
    b = a
    b.append(4)
    print(a)
    
  2. 如何安全地将用户输入的字符串转换为整数,并在输入无效时提示错误?

  3. 为什么 a = b = [] 在某些情况下会导致意外行为?如何正确初始化两个独立的空列表?