python变量更像是指针,而不是数据存储区域。
浅拷贝 深拷贝 Dataframe
https://www.jianshu.com/p/d816a97c8c0d
pandas里的copy
https://blog.csdn.net/qq_41967784/article/details/122864218
当deep=True
,数据被复制但实际的Python对象不会被递归复制,只能引用该对象。这与标准库中的copy.deepcopy
形成对比
https://www.cjavapy.com/article/348/
0
引用 | 独立 | |
浅拷贝 | 深拷贝 | |
pandas.copy() | deep=False | deep=True # 默认 |
copy | copy() | deepcopy() |
1
当涉及到对象的复制时,浅拷贝和深拷贝是两个常用的概念。
浅拷贝是指创建一个新的对象,该对象的内容是原始对象的引用。换句话说,浅拷贝只复制了对象的引用,而不是对象本身。当原始对象发生改变时,浅拷贝的对象也会随之改变。
深拷贝是指创建一个新的对象,该对象的内容是原始对象的副本。换句话说,深拷贝复制了对象的所有内容,包括对象内部的引用。即使原始对象发生改变,深拷贝的对象也不会受到影响。
下面是使用Python进行浅拷贝和深拷贝的简单示例:
import copy
# 浅拷贝示例
list1 = [1, 2, [3, 4]]
list2 = copy.copy(list1)
# 修改原始对象
list1[2][0] = 5
print(list1) # 输出: [1, 2, [5, 4]]
print(list2) # 输出: [1, 2, [5, 4]],浅拷贝的对象也受到了影响
# 深拷贝示例
list3 = copy.deepcopy(list1)
# 修改原始对象
list1[2][1] = 6
print(list1) # 输出: [1, 2, [5, 6]]
print(list3) # 输出: [1, 2, [5, 4]],深拷贝的对象不受影响
2pandas库的copy
方法
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = df1.copy(deep=False)
df1['A'][0] = 5
print(df1)
print(df2) # 受影响! 浅拷贝
df3 = df1.copy(deep=True)
df1['B'][0] = 6
print(df1)
print(df3) # 不受影响! 深拷贝