引用,浅拷贝和深拷贝

引用

变量名是别名,没有开辟新的内存,指向同一块内存

浅拷贝:

一般出现在array-like对象中,如list等。

虽然开辟了一块新的内存,但是对象中的每一个元素都是指向原对象的每个元素的地址。例如:

a = [1,2,[1,2,3]]

b =copy.copy(a)

id(a[2]) == id(b[2])

对于元素为不可变对象时,倒无所谓,如果元素为可变对象,那么a变b也变。

切片就是浅拷贝!!

深拷贝:

既开辟了新的内存,对象中的每个元素又都是数值的拷贝,而非地址。

使用方式:copy.deepcopy()

神奇的pandas:

经过对pandas的一番探索,引用,切片,花式索引。。结论是:pandas的内存机制实在是有点复杂,真是摸不透。

例如:a是一个dataframe, b = a.loc[:],这个操作后a.loc[1]的地址都会变..太恐怖了

所以还是总结一下,平时用的比较多的操作:

对于切片处理,如b = a.loc[:],如果修改b.loc[,]的值,a也会变,如果b经过一些其他的操作,如sort_values等之后,b又变成了一个单独的内存空间。

对于花式索引,如b = a[a[‘‘] > ],修改b.loc[,]的值,a不会变。


引用,浅拷贝和深拷贝
http://yoursite.com/2019/05/06/编程开发/Python/引用, 浅拷贝和深拷贝/
作者
Wei Lyu
发布于
2019年5月6日
许可协议