python-深浅复制,可变/不可变对象

#深复制(拷贝)
'''
import copy
a=[1,2,3,[4,5,6]]
#深拷贝
a_deepcopy=copy.deepcopy(a)
print(id(a))          #140399549872448
print(id(a_deepcopy)) #140399549873280
a[2]=100
print(a)              #[1, 2, 100, [4, 5, 6]]
print(a_deepcopy)     #[1, 2, 3, [4, 5, 6]]
a[3][0]=10
print(a)            #[1, 2, 100, [10, 5, 6]]
print(a_deepcopy)   #[1, 2, 3, [4, 5, 6]]
#改变a的元素,复制后的数据不会随着改变而改变
'''
#浅拷贝:数据办共享,复制 数据会独立存放,但是只拷贝成功到元数据的第一层,也就是拷贝后的第二层数据会随原数据改变
# import copy
# a=[1,2,3,[4,5,6]]
# #深拷贝
# a_copy=copy.copy(a)
# print(id(a))          #140460666104000
# print(id(a_copy)) #140460666104832
# a[2]=100
# print(a)              #[1, 2, 100, [4, 5, 6]]
# print(a_copy)     #[1, 2, 3, [4, 5, 6]]
# '''第一层没有随之改变'''
# a[3][0]=10
# print(a)            #[1, 2, 100, [10, 5, 6]]
# print(a_copy)   #[1, 2, 3, [10, 5, 6]]
'''第二层会随之发生变化'''

'''
深拷贝:完全复制,原数据发生变化,备份数据不会有任何影响,提高数据的存放安全性----日常备份
浅拷贝:半复制半数据共享,原数据第二层发生变化,备份数据也会随之发生变化
浅拷贝的应用场景---如日常办公时,在一个表时给链接🔗另一个表的数据,希望一个表数据更新,另一个表也能数据更新
'''

'''不可变对象 ,针对的是值(数据内容)来说的,原变量内容不可变,地址会发生改变
常见不可变对象类型:
数值类型int,bool,float,complex(复数)
字符型:str
元组 tuple'''
# i=70
# print(id(i)) #查看内存地址4498359088
# i+=2
# print(i)
# print(id(i)) #4498359152

#不可变对象的地址上的值是不能修改的,如果修改了这个对象的值,它指向的地址也会发生变化

# #如tuple,是不可变对象,代码会安全,在实际应用中,尽量使用不可变对象
# t=(1,2,3)
# t[1]=333
# print(t)  #TypeError: 'tuple' object does not support item assignment

'''可变对象:存储的数据内容可以在存储空间直接被修改'''
# m=[1,3,5,7]
# print(m)  #[1, 3, 5, 7]
# print(id(m))  #140442888567424
# m+=[6]
# print(m)  [1, 3, 5, 7, 6]
# print(id(m))  #140442888567424

set1={1,2,3,'qqq'}
print(set1,type(set1),id(set1))  #{1, 2, 3, 'qqq'} <class 'set'> 140590395203648
set1.add(222)
print(set1,type(set1),id(set1))   #{1, 2, 3, 'qqq', 222} <class 'set'> 140590395203648

 

posted @ 2024-04-15 12:58  正霜霜儿  阅读(7)  评论(0编辑  收藏  举报