一.==
和is
==——判断两个数据的值是否相等
is——判断地址是否相等
python数据存储:
- 给变量赋值的时候,如果数据的类型是数字或者字符串,不会直接开辟空间存数据。
而是先在数字、字符串对应的缓存区里面去查看是否已经存储过对应的数据。
如果已经存了,直接将之前的数据对应的地址赋给变量。
如果没有存储,才会开辟空间存储数据。
其他类型的数据,都是直接开辟空间村塾数据。然后再把地址返回。 - 容器类型中的元素在容器中不是直接存的值,而是元素值对应的地址
list1 = [1,2,3]
list2 = [1,2,3]
list3 = list2
print(list1 == list2)#True
print(list1 is list2)#False
print(list2 is list3)#True
print('=======',list1[0] is list2[0])#True#列表中元素的地址,数字和字符串
#只有字符串和数字会在内存缓冲区产生地址
number1 = 10
number2 = 10
print(number1 is number2)#True 缓冲区地址相同
二.浅拷贝和深拷贝
copy.copy(对象)——浅拷贝(直接拷贝元素的值产生一个新的地址)
copy.deepcopy(对象)——深拷贝(不会直接复制地址,而是将地址对应的值拷贝一份产生新的地址)
numbers1 = [1,2,3]
numbers2 = [10,20,30]
list1 = [numbers1,numbers2]
print('1.浅拷贝:')
# list2 = list1
# list1.append(111)
# print(list2,'~~~~',list1)#[[1, 2, 3], [10, 20, 30], 111] ~~~~ [[1, 2, 3], [10, 20, 30], 111]
list2 = list1.copy() #浅拷贝list2 = copy.copy(list1)
print('修改前list1',list1)#修改前list1 [[1, 2, 3], [10, 20, 30]]
print('修改前list2',list2)#修改前list2 [[1, 2, 3], [10, 20, 30]]
print('针对list1进行修改')#针对list1进行修改
list1.append(111)
list1[0].append(100)
print('修改后list1',list1)#修改后list1 [[1, 2, 3, 100], [10, 20, 30], 111]
print('修改后list2',list2)#修改后list2 [[1, 2, 3, 100], [10, 20, 30]]
numbers1 = [1,2,3]
numbers2 = [10,20,30]
list1 = [numbers1,numbers2]
print('2.深拷贝:')
list2 = copy.deepcopy(list1)
print('修改前list1',list1)#修改前list1 [[1, 2, 3], [10, 20, 30]]
print('修改前list2',list2)#修改前list2 [[1, 2, 3], [10, 20, 30]]
print('针对list1进行修改')#针对list1进行修改
list1.append(111)
list1[0].append(100)
print('修改后list1',list1)#修改后list1 [[1, 2, 3, 100], [10, 20, 30], 111]
print('修改后list2',list2)#修改后list2 [[1, 2, 3], [10, 20, 30]]
网友评论