Open qingfengmingjian opened 5 years ago
深浅拷贝:数据分离情况
print("以下是赋值") a=[1,2,"4",[4,5]] b=a print(a) print(b) b[0]=11 b[3][0]=44 print(a) print(b) 结果: 以下是赋值 [1, 2, '4', [4, 5]] [1, 2, '4', [4, 5]] [11, 2, '4', [44, 5]] [11, 2, '4', [44, 5]]
2.浅copy:数据半共享(仅可变数据类型指向同一个对象) 复制其数据独立内存存放(新建一个地址指向),但是只拷贝成功第一层: (1)如果是不可变数据类型(数字、字符串等),修改其中一个变量的值,由于浅copy的两个变量的地址指向独立,因此只有本身值被修改的变量发生变化,另一个不会改变; 2)如果是可变数据类型(列表、字典等),在修改数据时仅仅是其本身的地址指向发生了改变,但是指向可变数据类型的地址并未改变,因此会同时发生改变。
print("以下是浅拷贝") a=[1,2,"4",[4,5]] b=a.copy() print(a) print(b) b[0]=11 b[3][0]=44 print(a) print(b) 结果: 以下是浅拷贝 [1, 2, '4', [4, 5]] [1, 2, '4', [4, 5]] [1, 2, '4', [44, 5]] [11, 2, '4', [44, 5]]
3.深copy:数据完全不共享(数据独立,互不影响) 复制其数据完完全全放独立的一个内存,完全拷贝,数据不共享: (1)如果是不可变数据类型(数字、字符串等),修改其中一个变量的值,由于深copy的两个变量的地址指向独立,因此只有本身值被修改的变量发生变化,另一个不会改变; (2)如果是可变数据类型(列表、字典等),在修改数据时仅仅是其本身的地址指向发生了改变,由于是深copy,指向可变数据类型的地址完全独立,因此另一个变量不会发生改变。
print("以下是深拷贝") import copy a=[1,2,"4",[4,5]] b=copy.deepcopy(a) print(a) print(b) b[0]=11 b[3][0]=44 print(a) print(b) 结果: 以下是深拷贝 [1, 2, '4', [4, 5]] [1, 2, '4', [4, 5]] [1, 2, '4', [4, 5]] [11, 2, '4', [44, 5]]
深浅拷贝:数据分离情况
2.浅copy:数据半共享(仅可变数据类型指向同一个对象) 复制其数据独立内存存放(新建一个地址指向),但是只拷贝成功第一层: (1)如果是不可变数据类型(数字、字符串等),修改其中一个变量的值,由于浅copy的两个变量的地址指向独立,因此只有本身值被修改的变量发生变化,另一个不会改变; 2)如果是可变数据类型(列表、字典等),在修改数据时仅仅是其本身的地址指向发生了改变,但是指向可变数据类型的地址并未改变,因此会同时发生改变。
3.深copy:数据完全不共享(数据独立,互不影响) 复制其数据完完全全放独立的一个内存,完全拷贝,数据不共享: (1)如果是不可变数据类型(数字、字符串等),修改其中一个变量的值,由于深copy的两个变量的地址指向独立,因此只有本身值被修改的变量发生变化,另一个不会改变; (2)如果是可变数据类型(列表、字典等),在修改数据时仅仅是其本身的地址指向发生了改变,由于是深copy,指向可变数据类型的地址完全独立,因此另一个变量不会发生改变。