先贴一段代码,然后我们解释一下代码里的内容
首先id()是获取变量的地址
# -*- coding: UTF-8 -*-
"""
1.变量的地址
2.原地修改与替换
3.深浅copy
"""
import copy
a = 1
b = 1.0
c = 1
d = a
a_dict = {'username':'MrDing', 'PhoneNumber:':'0462356', 'address:':'仙境'} # 原始字典
b_dict = a_dict # 等号赋值字典
c_dict = a_dict.copy() # 浅copy
d_dict = copy.deepcopy(a_dict) # 深copy
a_list = [1, 2, [4, 3, 5]]
b_list = a_list.copy() #浅copy
c_list = copy.deepcopy(a_list) #深copy
sequence = [a, b, c, d, a_dict, b_dict, c_dict, d_dict, a_list, b_list, c_list]
for i in range(len(sequence)):
target = sequence[i]
print('{}的地址:{},类型为{}'.format(target, id(target), type(id(target))))
print(a == b)
print(a is b)
print('\n\n')
print('进行修改')
print('\n')
a = 2
a_dict['username'] = 'MrLong'
x = {'address':'猪圈'}
a_dict.update(x)
a_list[2].sort()
for i in range(len(sequence)):
target = sequence[i]
print('{}的地址:{},类型为{}'.format(target, id(target), type(id(target))))
程序输出为:
C:\Users\D_S17\AppData\Local\Programs\Python\Python36\python.exe D:/Smart_Husband_Sen/Python/python基础/深浅copy.py
1的地址:1985244640,类型为
1.0的地址:1891658895984,类型为
1的地址:1985244640,类型为
1的地址:1985244640,类型为
{'username': 'MrDing', 'PhoneNumber:': '0462356', 'address:': '仙境'}的地址:1891691170624,类型为
{'username': 'MrDing', 'PhoneNumber:': '0462356', 'address:': '仙境'}的地址:1891691170624,类型为
{'username': 'MrDing', 'PhoneNumber:': '0462356', 'address:': '仙境'}的地址:1891691170696,类型为
{'username': 'MrDing', 'PhoneNumber:': '0462356', 'address:': '仙境'}的地址:1891693678240,类型为
[1, 2, [4, 3, 5]]的地址:1891693710408,类型为
[1, 2, [4, 3, 5]]的地址:1891693825352,类型为
[1, 2, [4, 3, 5]]的地址:1891693824328,类型为
True
False
进行修改
1的地址:1985244640,类型为
1.0的地址:1891658895984,类型为
1的地址:1985244640,类型为
1的地址:1985244640,类型为
{'username': 'MrLong', 'PhoneNumber:': '0462356', 'address:': '仙境', 'address': '猪圈'}的地址:1891691170624,类型为
{'username': 'MrLong', 'PhoneNumber:': '0462356', 'address:': '仙境', 'address': '猪圈'}的地址:1891691170624,类型为
{'username': 'MrDing', 'PhoneNumber:': '0462356', 'address:': '仙境'}的地址:1891691170696,类型为
{'username': 'MrDing', 'PhoneNumber:': '0462356', 'address:': '仙境'}的地址:1891693678240,类型为
[1, 2, [3, 4, 5]]的地址:1891693710408,类型为
[1, 2, [3, 4, 5]]的地址:1891693825352,类型为
[1, 2, [4, 3, 5]]的地址:1891693824328,类型为
我们看到python变量实际存储的是值得地址就是说我们定义a = 1 的时候按人类得理解应该是a这里面放的是1这个数值,但实际上不是的,而是分配两块内存,一块用于存储我们所定义的这个数据,然后给我们这个变量再一个内存地址,存储的是我们数据的地址。
我们可以看下这个数据就知道了
a_list[2].sort()
for i in range(3):
target = sequence[-3:][i][2]
print('元素为:列表深层次的地址:', target, id(target))
程序输出为:
元素为:列表深层次的地址: [3, 4, 5] 2199651830728
元素为:列表深层次的地址: [3, 4, 5] 2199651830728
元素为:列表深层次的地址: [4, 3, 5] 2199651869448
python这种存储数据的方式是有助于节省内存的,节省了大量的重复数据