12.深浅拷贝
# 01.深浅拷贝
浅copy与deepcopy(What)
- 浅copy: 不管多么复杂的数据结构,浅拷贝都只会copy一层
- deepcopy : 深拷贝会完全复制原变量相关的所有数据,在内存中生成一套完全一样的内容,我们对这两个变量中任意一个修改都不会影响其他变量
import copy sourceList = [1,2,3,[4,5,6]] copyList = copy.copy(sourceList) deepcopyList = copy.deepcopy(sourceList) sourceList[3][0]=100 print(sourceList) # [1, 2, 3, [100, 5, 6]] print(copyList) # [1, 2, 3, [100, 5, 6]] print(deepcopyList) # [1, 2, 3, [4, 5, 6]]
1
2
3
4
5
6
7
8
9
10
- 案例
import copy
a = [1,2,3,4,['a','b']]
b = a
c = copy.copy(a)
d = copy.deepcopy(a)
a.append(5)
a[4].append('c')
print(a) # [1, 2, 3, 4, ['a', 'b', 'c'], 5]
print(b) # [1, 2, 3, 4, ['a', 'b', 'c'], 5]
print(c) # [1, 2, 3, 4, ['a', 'b', 'c']]
print(d) # [1, 2, 3, 4, ['a', 'b']]
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 02.变量及其存储
- python的一切变量都是对象,变量的存储,采用了引用语义的方式,存储的只是一个变量的值所在的内存地址,而不是这个变量的只本身
- 不管多么复杂的数据结构,浅拷贝都只会copy一层。
理解:两个人公用一张桌子,只要桌子不变,桌子上的菜发生了变化两个人是共同感受的。
>>> str1 = 'hello'
>>> str2 = str1
#1、让str1和str2变量都存储了‘hello’所在的内存地址
>>> id(str1)
22748280
>>> id(str1)
22748280
>>>
#2、当str1的值变成‘new hello’后str1的值被重新赋值成'new hello'的内存地址,而str2的值依旧是‘hello’的内存地址
>>> str1 = 'new hello'
>>> id(str1)
22748320
>>> id(str2)
22748280
#3、不管多么复杂的数据结构,浅拷贝都只会copy一层。
>>> sourceList = [1,2,[3,4]]
>>> newList = sourceList
>>> l[2][0]=100
>>> sourceList
[1, 2, [100, 4]]
>>> newList
[1, 2, [100, 4]]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 03.is和==区别
# 3.1 is和==区别
- is不仅数据一样内存地址也一样
- == 只判断数据和数据类型一样即可
# 3.2 小数据池
- 1)int
- 那么大家都知道对于整数来说,小数据池的范围是
-5~256
- 如果多个变量都是指向同一个(在这个范围内的)数字,他们在内存中指向的都是一个内存地址。
- 那么大家都知道对于整数来说,小数据池的范围是
>>> a1 = 256
>>> a2 = 256
>>> a1 is a2
True
>>> b1 = 257
>>> b2 = 257
>>> b1 is b2
False
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
- 2)字符串
- 字符串的长度>1,且只含有大小写字母,数字,下划线时,才会默认驻留
- 字符串的长度>1,切包含特殊字符串,默认不会驻留
'''字符串的长度>1,且只含有大小写字母,数字,下划线时,才会默认驻留'''
>>> b1 = 'abcedf'
>>> b2 = 'abcedf'
>>> b1 is b2
True
'''如果包含特殊字符串,不会默认驻留'''
>>> c1 = '@abc'
>>> c2 = '@abc'
>>> c1 is c2
False
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 3.3 代码块概念
Python程序是由代码块构造的,块是一个python程序的文本,他是作为一个单元执行的。
代码块:一个模块,一个函数,一个类,一个文件等都是一个代码块。
而作为交互方式输入的每个命令都是一个代码块。
交互模式
脚本中
上次更新: 2024/3/13 15:35:10