前提条件
内存地址一样的对象,改变一个,其他对象也会跟着改变
一.直接赋值
1.对不可变的数据类型直接赋值
a = '123'
a1 = a
print("a=>", a, id(a))
print("a1=>", a1, id(a1))
a = 1234
print("a=>", a, id(a))
print("a1=>", a1, id(a1))
# a=> 123 2079851612464
# a1=> 123 2079851612464
# a=> 1234 2079851698160
# a1=> 123 2079851612464
2.对可变的数据类型直接赋值
a = [1, 2, 3]
b = {"1": 1, "2": 2, "3": ['a', 'b', 'c']}
a1 = a
b1 = b
print("a=>", a, id(a))
print("a1=>", a1, id(a1))
print("b=>", b, id(b))
print("b['3']=>", b['3'], id(b['3']))
print("b['1']=>", b['1'], id(b['1']))
print("b1=>", b1, id(b1))
print('==============================================================')
a.append(4)
b['4'] = 4
b['3'].append('0')
print("a=>", a, id(a))
print("a1=>", a1, id(a1))
print("b=>", b, id(b))
print("b['3']=>", b['3'], id(b['3']))
print("b['1']=>", b['1'], id(b['1']))
print("b1=>", b1, id(b1))
# a=> [1, 2, 3] 2005102744128
# a1=> [1, 2, 3] 2005102744128
# b=> {'1': 1, '2': 2, '3': ['a', 'b', 'c']} 2005101204288
# b['3']=> ['a', 'b', 'c'] 2005102743104
# b['1']=> 1 140708344239888
# b1=> {'1': 1, '2': 2, '3': ['a', 'b', 'c']} 2005101204288
# ==============================================================
# a=> [1, 2, 3, 4] 2005102744128
# a1=> [1, 2, 3, 4] 2005102744128
# b=> {'1': 1, '2': 2, '3': ['a', 'b', 'c', '0'], '4': 4} 2005101204288
# b['3']=> ['a', 'b', 'c', '0'] 2005102743104
# b['1']=> 1 140708344239888
# b1=> {'1': 1, '2': 2, '3': ['a', 'b', 'c', '0'], '4': 4} 2005101204288
结论:直接赋值,无论是可变对象还是不可变对象都不会开辟新的内存空间
二.浅拷贝
1.对不可变的数据类型直接赋值
import copy
a = '123'
a1 = copy.copy(a)
print("a=>", a, id(a))
print("a1=>", a1, id(a1))
a = 1234
print("a=>", a, id(a))
print("a1=>", a1, id(a1))
# a=> 123 2068640106992
# a1=> 123 2068640106992
# a=> 1234 2068640192496
# a1=> 123 2068640106992
2.对可变的数据类型直接赋值
import copy
a = [1, 2, 3]
b = {"1": 1, "2": 2, "3": ['a', 'b', 'c']}
a1 = copy.copy(a)
b1 = copy.copy(b)
print("a=>", a, id(a))
print("a1=>", a1, id(a1))
print("b=>", b, id(b))
print("b['3']=>", b['3'], id(b['3']))
print("b['1']=>", b['1'], id(b['1']))
print("b1=>", b1, id(b1))
print('==============================================================')
a.append(4)
b['4'] = 4
b['3'].append('0')
b['1'] = 111
print("a=>", a, id(a))
print("a1=>", a1, id(a1))
print("b=>", b, id(b))
print("b['3']=>", b['3'], id(b['3']))
print("b['1']=>", b['1'], id(b['1']))
print("b1=>", b1, id(b1))
# a=> [1, 2, 3] 1962622177088
# a1=> [1, 2, 3] 1962622180544
# b=> {'1': 1, '2': 2, '3': ['a', 'b', 'c']} 1962620638016
# b['3']=> ['a', 'b', 'c'] 1962622004416
# b['1']=> 1 140708344239888
# b1=> {'1': 1, '2': 2, '3': ['a', 'b', 'c']} 196262063808
# ==============================================================
# a=> [1, 2, 3, 4] 1962622177088
# a1=> [1, 2, 3] 1962622180544
# b=> {'1': 111, '2': 2, '3': ['a', 'b', 'c', '0'], '4': 4} 1962620638016
# b['3']=> ['a', 'b', 'c', '0'] 1962622004416
# b['1']=> 111 140708344243408
# b1=> {'1': 1, '2': 2, '3': ['a', 'b', 'c', '0']} 196262063808
1.浅拷贝对不可变的数据类型(无论是内外层),不会开辟新的内存空间
2.浅拷贝对可变的数据类型外层会开辟新的内存空间,当被拷贝对象的外层数据改变时,不会影响拷贝的对象
3.浅拷贝对可变的数据类型内层会开辟新的内存空间,当被拷贝对象的内层可变的数据类型改变时,其拷贝对象的内层可变的数据类型也会随之改变
三.深拷贝
1.对不可变的数据类型直接赋值
import copy
a = '123'
a1 = copy.deepcopy(a)
print("a=>", a, id(a))
print("a1=>", a1, id(a1))
a = 1234
print("a=>", a, id(a))
print("a1=>", a1, id(a1))
# a=> 123 1280857016816
# a1=> 123 1280857016816
# a=> 1234 1280857102320
# a1=> 123 1280857016816
2.对可变的数据类型直接赋值
import copy
a = [1, 2, 3]
b = {"1": 1, "2": 2, "3": ['a', 'b', 'c']}
a1 = copy.deepcopy(a)
b1 = copy.deepcopy(b)
print("a=>", a, id(a))
print("a1=>", a1, id(a1))
print("b=>", b, id(b))
print("b['3']=>", b['3'], id(b['3']))
print("b['1']=>", b['1'], id(b['1']))
print("b1=>", b1, id(b1))
print('==============================================================')
a.append(4)
b['4'] = 4
b['3'].append('0')
b['1'] = 111
print("a=>", a, id(a))
print("a1=>", a1, id(a1))
print("b=>", b, id(b))
print("b['3']=>", b['3'], id(b['3']))
print("b['1']=>", b['1'], id(b['1']))
print("b1=>", b1, id(b1))
# a=> [1, 2, 3] 1323689037440
# a1=> [1, 2, 3] 1323689040960
# b=> {'1': 1, '2': 2, '3': ['a', 'b', 'c']} 1323683304256
# b['3']=> ['a', 'b', 'c'] 1323688864896
# b['1']=> 1 140708344239888
# b1=> {'1': 1, '2': 2, '3': ['a', 'b', 'c']} 1323687938048
# ==============================================================
# a=> [1, 2, 3, 4] 1323689037440
# a1=> [1, 2, 3] 1323689040960
# b=> {'1': 111, '2': 2, '3': ['a', 'b', 'c', '0'], '4': 4} 1323683304256
# b['3']=> ['a', 'b', 'c', '0'] 1323688864896
# b['1']=> 111 140708344243408
# b1=> {'1': 1, '2': 2, '3': ['a', 'b', 'c']} 1323687938048
深拷贝对不可变的数据类型(无论是内外层)和可变的数据类型,都会开辟新的内存空间