- 变量的本质 - 引用
在 Python 里,变量更像是一个标签或者引用,而不是传统意义上存储数据的容器。当你创建一个变量并给它赋值时,实际上是将这个变量名指向了内存中存储该数据的对象。
a=10
2 . 内存分配
当你创建一个对象时,Python 解释器会在内存中为该对象分配空间。对象的类型决定了所需内存的大小和布局。
b = [1, 2, 3]
3 . 引用计数
Python 使用引用计数来管理内存。每个对象都有一个引用计数器,记录了有多少个变量引用了该对象。当引用计数为 0 时,说明没有变量再引用这个对象,Python 解释器会自动回收该对象所占用的内存。
c = [4, 5, 6] # 列表对象 [4, 5, 6] 的引用计数为 1
d = c # 引用计数变为 2
del c # 引用计数变为 1
del d # 引用计数变为 0,对象被回收
4 . 动态类型
Python 是一种动态类型语言,这意味着变量的类型在运行时确定,而不是在编译时确定。你可以在程序的不同阶段将不同类型的值赋给同一个变量。
e = 10 # e 是整数类型
e = "hello" # e 现在是字符串类型
5 . 可变对象和不可变对象
在 Python 中,对象可以分为可变对象和不可变对象。可变对象在创建后可以修改其内部状态,而不可变对象一旦创建就不能修改。
不可变对象
常见的不可变对象有整数、浮点数、字符串、元组等。当对不可变对象进行操作时,实际上是创建了一个新的对象。
f = 20
g = f
f = f + 10
print(f) # 输出 30
print(g) # 输出 20
可变对象
常见的可变对象有列表、字典、集合等。对可变对象进行操作时,是直接修改对象的内部状态,而不会创建新的对象。
h = [1, 2, 3]
i = h
h.append(4)
print(h) # 输出 [1, 2, 3, 4]
print(i) # 输出 [1, 2, 3, 4]
6 . 命名空间
Python 使用命名空间来管理变量的作用域。命名空间是一个从变量名到对象的映射,不同的命名空间是相互独立的。Python 中有全局命名空间、局部命名空间等。
# 全局命名空间
x = 100
def func():
# 局部命名空间
y = 200
print(y)
func()
print(x)