引用,浅拷贝和深拷贝
引用
变量名是别名,没有开辟新的内存,指向同一块内存
浅拷贝:
一般出现在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/引用, 浅拷贝和深拷贝/