Python中的赋值和深浅拷贝
Python中的赋值及深浅拷贝
# 赋值
# 示例
# 赋值
a = ['aa', 'bb', 14, 12]
b = a
print('a:{}\nb:{}'.format(a, b))
print('a的内存地址:{}\nb的内存地址:{}'.format(id(a), id(b))) # a,b内存地址相同,指向内存中同一个区域。
a[0] = 1
print("执行了‘a[0] = 1’后".center(50, '*'))
print('a:{}\nb:{}'.format(a, b)) # a的值发生改变,b的值也随之发生改变
print('a的内存地址:{}\nb的内存地址:{}'.format(id(a), id(b))) # a,b内存地址相同,指向内存中同一个区域。
b[1] = 2
print("执行了‘b[1] = 2’后".center(50, '*'))
print('a:{}\nb:{}'.format(a, b)) # b的值发生改变,a的值也随之发生改变
print('a的内存地址:{}\nb的内存地址:{}'.format(id(a), id(b))) # a,b内存地址相同,指向内存中同一个区域。
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 打印
a:['aa', 'bb', 14, 12]
b:['aa', 'bb', 14, 12]
a的内存地址:140362409249160
b的内存地址:140362409249160
# ******************执行了‘a[0] = 1’后******************
a:[1, 'bb', 14, 12]
b:[1, 'bb', 14, 12]
a的内存地址:140362409249160
b的内存地址:140362409249160
# ******************执行了‘b[1] = 2’后******************
a:[1, 2, 14, 12]
b:[1, 2, 14, 12]
a的内存地址:140362409249160
b的内存地址:140362409249160
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 浅拷贝
# 示例
# 浅拷贝
a = ['aa', [1, 2, 3], 'bb', 14, 12]
b = a.copy() # 浅拷贝
print('a:{}\nb:{}'.format(a, b))
print('a的内存地址:{}\nb的内存地址:{}'.format(id(a), id(b))) # a,b内存地址不同
b[0] = 'cc'
print("执行了b[0] = 'cc'后".center(50, '*'))
print('a:{}\nb:{}'.format(a, b)) # 只改变(b[0] = 'cc')最外层列表时,b[0] = 'cc',a[1][0] = 1,a[0]的值无变化
print('a的内存地址:{}\nb的内存地址:{}'.format(id(a), id(b))) # a,b内存地址不同
b[1][0] = 10
print("执行了‘a[1][0] = 10’后".center(50, '*'))
print('a:{}\nb:{}'.format(a, b)) # 改变(b[1][0] = 10)第二层列表中的值时,b[1][0] = 10,a[1][0] = 10
print('a的内存地址:{}\nb的内存地址:{}'.format(id(a), id(b))) # a,b内存地址不同
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 打印
a:['aa', [1, 2, 3], 'bb', 14, 12]
b:['aa', [1, 2, 3], 'bb', 14, 12]
a的内存地址:139809337808456
b的内存地址:139809337809160
# *****************执行了b[0] = 'cc'后******************
a:['aa', [1, 2, 3], 'bb', 14, 12]
b:['cc', [1, 2, 3], 'bb', 14, 12]
a的内存地址:139809337808456
b的内存地址:139809337809160
# ****************执行了‘a[1][0] = 10’后****************
a:['aa', [10, 2, 3], 'bb', 14, 12]
b:['cc', [10, 2, 3], 'bb', 14, 12]
a的内存地址:139809337808456
b的内存地址:139809337809160
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 深拷贝
# 示例
# 深拷贝
import copy
a = ['aa', [1, 2, 3], 'bb', 14, 12]
b = copy.deepcopy(a) # 深拷贝
print('a:{}\nb:{}'.format(a, b))
print('a的内存地址:{}\nb的内存地址:{}'.format(id(a), id(b))) # a,b内存地址不同
b[0] = 'cc'
print("执行了b[0] = 'cc'后".center(50, '*'))
print('a:{}\nb:{}'.format(a, b)) # 改变(b[0] = 'cc')最外层列表时,b[0] = 'cc',a[0] = 'aa',a[0]值无变化
print('a的内存地址:{}\nb的内存地址:{}'.format(id(a), id(b))) # a,b内存地址不同
b[1][0] = 10
print("执行了‘a[1][0] = 10’后".center(50, '*'))
print('a:{}\nb:{}'.format(a, b)) # 改变(b[1][0] = 10)第二层列表中的值时,b[1][0] = 10,a[1][0] = 1,a[1][0]无变化
print('a的内存地址:{}\nb的内存地址:{}'.format(id(a), id(b))) # a,b内存地址不同
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 打印
a:['aa', [1, 2, 3], 'bb', 14, 12]
b:['aa', [1, 2, 3], 'bb', 14, 12]
a的内存地址:139961185536008
b的内存地址:139961185537288
# *****************执行了b[0] = 'cc'后******************
a:['aa', [1, 2, 3], 'bb', 14, 12]
b:['cc', [1, 2, 3], 'bb', 14, 12]
a的内存地址:139961185536008
b的内存地址:139961185537288
# ****************执行了‘a[1][0] = 10’后****************
a:['aa', [1, 2, 3], 'bb', 14, 12]
b:['cc', [10, 2, 3], 'bb', 14, 12]
a的内存地址:139961185536008
b的内存地址:139961185537288
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 三层列表演示
# 示例
# 三层列表示例
import copy
a = ['aa', [['哈哈哈', '呵呵呵'], 1, 2, 3], 'bb', 14, 12]
c = a.copy() # 浅拷贝
b = copy.deepcopy(a) # 深拷贝
print('a:{}\nb:{}\nc:{}'.format(a, b, c))
print('a的内存地址:{}\nb的内存地址:{}\nc的内存地址:{}'.format(id(a), id(b), id(c))) # a,b,c内存地址不同
a[1][0][1] = '啦啦啦'
print("执行了a[1][0][1]='啦啦啦'后".center(50, '*'))
print('a:{}\nb:{}\nc:{}'.format(a, b, c)) # c浅拷贝的值随着a的改变而发生变化,b深拷贝的值无变化.
print('a的内存地址:{}\nb的内存地址:{}\nc的内存地址:{}'.format(id(a), id(b), id(c))) # a,b,c内存地址不同
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 打印
a:['aa', [['哈哈哈', '呵呵呵'], 1, 2, 3], 'bb', 14, 12]
b:['aa', [['哈哈哈', '呵呵呵'], 1, 2, 3], 'bb', 14, 12]
c:['aa', [['哈哈哈', '呵呵呵'], 1, 2, 3], 'bb', 14, 12]
a的内存地址:140291239103560
b的内存地址:140291239103432
c的内存地址:140291239103496
# ***************执行了a[1][0][1]='啦啦啦'后***************
a:['aa', [['哈哈哈', '啦啦啦'], 1, 2, 3], 'bb', 14, 12]
b:['aa', [['哈哈哈', '呵呵呵'], 1, 2, 3], 'bb', 14, 12]
c:['aa', [['哈哈哈', '啦啦啦'], 1, 2, 3], 'bb', 14, 12]
a的内存地址:140291239103560
b的内存地址:140291239103432
c的内存地址:140291239103496
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
编辑 (opens new window)
上次更新: 2021/08/10, 00:23:06
- 01
- Python实现对字符串的加解密02-25
- 02
- Python3对大文件中指定字符进行排序再写入到新的文件10-24
- 03
- Ubuntu下配置adb环境连接Android设备进行调试08-17