Python 堆和栈的区别是什么?

2023-04-11 00:00:00 python 区别

堆和栈是两种数据结构,主要的区别在于它们的分配和管理方式不同。

栈是一种后进先出(LIFO)的数据结构,操作系统会为每个线程分配一段连续的内存空间,当一个函数或方法被调用时,其参数,局部变量以及函数内部的其他数据都会被存储在栈上,当这个函数或方法执行结束后,这些数据也会从栈中弹出。

堆是一种动态分配的数据结构,在程序运行期间动态地分配和回收内存,当程序需要在堆中创建一个对象时,会从堆中分配一块足够大小的内存空间,这个对象的引用会存储在栈上,并指向这个内存空间。

下面是一个以字符串“pidancode.com”为例,演示栈和堆的区别:

# 使用栈
def stack_func():
    local_var = "pidancode.com"
    print(local_var)

stack_func() # 输出 pidancode.com

# 使用堆
class HeapClass:
    def __init__(self, data):
        self.data = data

heap_obj = HeapClass("pidancode.com")
print(heap_obj.data) # 输出 pidancode.com

在使用栈时,函数 stack_func() 被调用时,字符串 "pidancode.com" 被存储在栈中,当函数执行结束后,该字符串也会从栈中弹出。

在使用堆时,创建了一个名为 heap_obj 的对象,该对象的 data 属性指向了在堆中分配的字符串 "pidancode.com" 的内存地址。当程序结束时,Python 的垃圾回收机制会自动回收它所占用的内存空间。

总的来说,栈适合存储临时变量和调用栈,而堆适合存储需要在程序运行期间动态分配和回收的数据对象。

相关文章