python变量详解

好,这一题是 Python 入门到进阶都绕不开的核心
我会按 “是什么 → 怎么用 → 底层原理 → 易错点 → 面试/实战总结” 给你一篇真正把变量讲透的说明。


Python 变量详解


一、Python 中的变量是什么?

一句话定义:

Python 变量本质上是“对象的引用”,而不是装数据的盒子。

a = 10

含义是:

  • 创建一个整数对象 10
  • 变量 a 指向(引用) 这个对象

二、变量的创建与赋值

1️⃣ 基本赋值

x = 5
name = "Alice"

📌 Python 不需要声明类型


2️⃣ 动态类型特性

a = 10
a = "hello"
  • 合法
  • 变量类型随对象改变

3️⃣ 多重赋值

a = b = c = 0

⚠️ 注意:都指向 同一个对象


4️⃣ 解包赋值(非常常用)

x, y = 1, 2
a, b = b, a   # 交换变量

三、变量命名规则

合法规则

  • 字母、数字、下划线
  • 不能以数字开头
  • 区分大小写
  • 不能使用关键字
import keyword
keyword.kwlist

命名规范(PEP 8)

  • 变量 / 函数:snake_case
  • 常量:UPPER_CASE
total_score = 90
MAX_SIZE = 100

四、变量与对象的关系(重点)

1️⃣ 查看对象身份

a = 10
b = a

id(a) == id(b)   # True

👉 a 和 b 指向同一个对象


2️⃣ 可变对象 vs 不可变对象

不可变对象

  • int
  • float
  • str
  • tuple
a = 10
a += 1   # 新对象

可变对象

  • list
  • dict
  • set
lst = [1, 2]
lst.append(3)   # 原对象修改

五、变量修改的本质差异(高频坑)

示例对比

a = 10
b = a
a += 1
  • a 指向新对象 11
  • b 仍指向 10
lst1 = [1, 2]
lst2 = lst1
lst1.append(3)
  • lst1 和 lst2 都变了

六、作用域(Scope)

1️⃣ LEGB 规则

查找顺序:

Local → Enclosing → Global → Built-in

2️⃣ global / nonlocal

x = 10

def func():
    global x
    x = 20
def outer():
    x = 10
    def inner():
        nonlocal x
        x = 20

七、变量删除

a = 10
del a
  • 删除的是 引用
  • 对象是否销毁由 GC 决定

八、浅拷贝 vs 深拷贝(变量相关)

import copy
copy.copy(obj)      # 浅拷贝
copy.deepcopy(obj)  # 深拷贝

📌 与“可变对象引用”强相关


九、常见误区总结(非常重要)

❌ 1. Python 变量是盒子

错,是引用

❌ 2. = 是拷贝

错,是绑定

❌ 3. 函数参数是引用传递

准确说法:对象引用传递(call by object reference)


十、面试一句话总结

Python 变量本质是对象引用,赋值只是绑定关系的改变,不可变对象会产生新对象,而可变对象在原地修改。


十一、速记口诀

名不存值,名指对象;
可变改自身,不可变换新家。


如果你愿意,我可以下一步直接带你:

  • 🔥 Python 变量面试 10 连击
  • 🔥 参数传递底层原理
  • 🔥 可变对象陷阱合集
  • 🔥 Python 内存管理 / GC

你是 Python 新手,还是 准备面试 / 写工程

文章已创建 4298

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部