python基础(6)-深浅拷贝

赋值

字符串和数字

# id()函数能够获取变量在内存中的地址标识
num1 = 2;
num2 = 2;
print(id(num1))  # result:8791124202560
print(id(num2))  # result:8791124202560
str1 = '123'
str2 = '123'
print(id(str1))  # result:39986040
print(id(str2))  # result:39986040

结论:对于数字和字符串来讲,赋值时若是有相同的值在python管理的内存中,python内部会把这个值的引用(地址)指向被赋值的变量python

列表&字典&元组

 1 from copy import *
 2 list1 = [1, {'a': 1, 'b': 2}, ('a', 'b', 'c')]
 3 list2 = list1
 4 #列表
 5 print(id(list1))  # result:30433928
 6 print(id(list2))  # result:30433928
 7 #字典
 8 print(id(list1[1]))  # result:31017792
 9 print(id(list2[1]))  # result:31017792
10 #元组
11 print(id(list1[2]))  # result:35446576
12 print(id(list1[2]))  # result:35446576

结论:对于赋值,列表,字典,元组用的都是同一块地址函数

浅拷贝

字符串和数字

1 from copy import *
2 str1 = '123'
3 str2 = copy(str1)  # 使用copy模块里的copy()函数进行浅拷贝
4 print(id(str1))  # result:31204496
5 print(id(str2))  # result:31204496
6 num1 = 3
7 num2 = copy(num1)
8 print(id(num1))  # rsult:8791078065248
9 print(id(num2))  # rsult:8791078065248

结论:数字和字符串的浅拷贝,与赋值相同,在内存当中用的也是同一个地址
spa

列表&字典&元组

 1 from copy import *
 2 list1 = [1, {'a': 1, 'b': 2}, ('a', 'b', 'c')]
 3 list2 = copy(list1)
 4 # 列表
 5 print(id(list1))  # result:42354568
 6 print(id(list2))  # result:42227400
 7 # 字典
 8 print(id(list1[1]))  # result:30952256
 9 print(id(list2[1]))  # result:30952256
10 # 元组
11 print(id(list1[2]))  # result:41082600
12 print(id(list2[2]))  # result:41082600
13 
14 tuple1 = (1, {'a': 1, 'b': 2}, ['a', 'b', 'c'])
15 tuple2 = copy(tuple1)
16 # 元组
17 print(id(tuple1))  # result:35668112
18 print(id(tuple2))  # result:35668112
19 # 字典
20 print(id(tuple1[1]))  # result:30821256
21 print(id(tuple2[1]))  # result:30821256
22 # 列表
23 print(id(tuple1[2]))  # result:35862792
24 print(id(tuple2[2]))  # result:35862792

结论:对于列表和字典,浅拷贝会拷贝第一层引用(但最外层是元组时,不会拷贝).code

深拷贝

字符串和数字

1 from copy import *
2 str1 = '123'
3 str2 = deepcopy(str1)  # 使用copy模块里的copy()函数进行浅拷贝
4 print(id(str1))  # result:31269752
5 print(id(str2))  # result:31269752
6 num1 = 3
7 num2 = deepcopy(num1)
8 print(id(num1))  # rsult:8791074002016
9 print(id(num2))  # rsult:8791074002016

结论:不管是赋值或是浅拷贝亦或是深拷贝,字符串和数字都是用同一个地址blog

列表&字典&元组

 1 from copy import *
 2 list1 = [1, {'a': 1, 'b': 2}, [1, 2, 3], ('a', 'b', 'c')]
 3 list2 = deepcopy(list1)
 4 # 外层列表
 5 print(id(list1))  # result:32134984
 6 print(id(list2))  # result:32133768
 7 # 字典
 8 print(id(list1[1]))  # result:4410176
 9 print(id(list2[1]))  # result:31862720
10 # 列表
11 print(id(list1[2]))  # result:32262088
12 print(id(list2[2]))  # result:32262408
13 # 元组
14 print(id(list1[3]))  # result:32038704
15 print(id(list2[3]))  # result:32038704

结论:深拷贝会对列表和字典进行拷贝,但对于元组,深浅拷贝都会失效.内存

相关文章
相关标签/搜索