Python内存机制
python的万物皆对象可不只是说说而已。
1. 预备知识:
id()
:可以将id
()理解为C语言中的*
,其返回当前对象在内存中的地址。
int p = id(object) # id函数返回对象object在其生命周期内位于内存中的地址,id函数的参数类型是一个对象
2. 万物皆对象
python的理念是万物皆对象,故在python语言中,所有的“元素”都应看为python的一个对象。
如果按照C语言的思维,x和y应该具有不同的地址。
但是在python中,万物皆对象,故3
是一个对象。x和y都指向同一个对象3
,故x和y的内存是相同的。
3. = 的作用
如果按照C语言的思维,x只是进行了简单的赋值,两次打印x应该具有相同的地址。
但是在python中,万物皆对象。x=x+y
,是两个对象相加,在等号右边x+y
两个对象相加后形成了一个新的对象,并将新对象赋值给了变量名x,之前的对象x因为没有了引用就被析构掉了。故两次打印x的地址不同。
4. 避免“析构”
在python绝大多数对象中,都可以使用切片
,+=
直接对对象的内存赋值来避免对象的析构与构造操作,从而节省大量的时间。
5. 应用场景
数组、numpy、pandas、tensor这种对象在包含大量元素的时候进行析构与构造时会浪费大量的时间,这时理解python的内存处理机制,对对象的内存数据进行处理而不是重新构造新对象会节省大量的时间,提高程序的运行效率。