#赋值: 只是多了个标签,没有产生新的空间
# a = 3
# b = a
#print(b)
#print(id(a),id(b))
#浅拷贝两种情况
#.=创建新对象,内容是对原对象的引用
#两种情况
#可变对象(字典,集合,列表)
##产生一个新的空间
#不可变对象 (字符串,元组,数值)
##和赋值时情况一样
# list1 = [12,3,4]
# list2 = list1[:]
# list3 = list(list1)
# import copy
# list4 = copy.copy(list1)
# #print(id(list1),id(list2),id(list3),id(list4)) #出现疑问了?为什么地址不同?
# str1 = "aaaaaaaa"
# str2 = str1[:]
# print(id(str1),id(str2))
#深拷贝 拷贝对象中的所有元素,和原对象没有任何关联
#例子:
import copy
# 对不可变元素的赋值深浅拷贝
# a =(1,2,3)
# #赋值
# b = a
# print(id(b),id(a))
# #浅拷贝
# b =copy.copy(a)
# print(a,b)
# print(id(b),id(a))
# #深拷贝
# b =copy.deepcopy(a)
# print(a,b)
# print(id(b),id(a))
#不可变对象不管啥操作,都一样
#可变对象赋值深浅拷贝
# a = [1,2,3]
# # #赋值
# b = a
# print(id(a),id(b))
#
# # #浅拷贝
# b =copy.copy(a)
# print(a,b)
# print(id(a),id(b))
#
#
# # #深拷贝
# b =copy.deepcopy(a)
# print(a,b)
# print(id(a),id(b))
#赋值 值和地址 都相等
#浅拷贝 值相等 地址不同
#深拷贝 值相等 地址不同
###########################################################
##可变对象赋值深浅拷贝 (一级添加元素)
import copy
list1 = [1,2,3,4,[5,6]]
list2 = list1
list3 = copy.copy(list1)
list4 = copy.deepcopy(list1)
list1.append(6)
print("原值",list1)
print("赋值",list2)
print("浅复制",list3)
print("深复制",list4)
print("*"*20)
import copy
list1 = [1,2,3,4,[5,6]] #(二级添加元素)
list2 = list1
list3 = copy.copy(list1)
list4 = copy.deepcopy(list1)
list1[4].append(6)
print("原值",list1)
print("赋值",list2)
print("浅复制",list3)
print("深复制",list4)
#浅复制: 在一级列表添加元素时,不会跟着原对象变化,在二级添加元素时,浅拷贝会发生变化
#深拷贝:没有任何变化
#赋值:跟着原对象一起变