# 赋值运算
l1 = [1,2,3,[22,33]]
l2 = l1
l1.append(66)
print(l1) # [1, 2, 3, [22, 33], 66]
print(l2) # [1, 2, 3, [22, 33], 66]
# 对于赋值运算来说，l1与l2指向的是同一个内存地址，所以他们是完全一样的，


# 浅copy 对于浅copy来说，只是在内存中重新创建了开辟了一个空间存放一个新列表，但是新列表中的元素与原列表中的元素是公用的。
l1 = [1, 2, 3, [22, 33]]
l2 = l1.copy()
l1.append(666)
print(l1,id(l1)) # [1, 2, 3, [22, 33], 666] 2591289662984
print(l2,id(l2)) # [1, 2, 3, [22, 33]] 2591289662472

l1 = [1, 2, 3, [22, 33]]
l2 = l1.copy()
l1[-1].append(666)
print(id(l1[-1]))
print(id(l2[-1]))
print(id(l1[0]))
print(id(l2[0]))
print(l1)
print(l2)


l1 = [1, 2, 3, [22, 33]]
l2 = l1.copy()
l1[0] = 90
print(l1)
print(l2)



# 深copy  对于深copy来说，列表是在内存中重新创建的，列表中可变的数据类型是重新创建的，列表中的不可变的数据类型是公用的。
import copy
l1 = [1, 2, 3, [22, 33]]
l2 = copy.deepcopy(l1)
print(id(l1)) # 2510036171272
print(id(l2)) # 2510036163656
l1[-1].append(666)
print(l1)
print(l2)

# 相关面试题；
l1 = [1, 2, 3, [22, 33]]
l2 = l1[:]
l1[-1].append(666)
print(l1) # [1, 2, 3, [22, 33, 666]]
print(l2) # [1, 2, 3, [22, 33, 666]]
# 浅copy： list dict: 嵌套的可变的数据类型是同一个。
# 深copy： list dict: 嵌套的可变的数据类型不是同一个 。