输出结果
case1():
# 44713512 <=====> [45433248, 2053241056, 15717896]
# 44713512 <=====> [45433248, 2053241056, 15717896]
# True
# 44713512 <=====> [45433248, 2053241056, 15717896, 15187264]
# 44713512 <=====> [45433248, 2053241056, 15717896, 15187264]
# True
# 44713512 <=====> [45433408, 2053241056, 15717896, 15187264]
# 44713512 <=====> [45433408, 2053241056, 15717896, 15187264]
# True
# 44713512 <=====> [45433408, 2053241056, 15717896, 15187264]
# 44713512 <=====> [45433408, 2053241056, 15717896, 15187264]
# True
# 44854952 <=====> [45433472, 2053241056, 44855016]
# 44713512 <=====> [45433408, 2053241056, 15717896, 15187264]
# False
case2():
# 23424584 <=====> [60113312, 2053241056, 23424616]
# 23424520 <=====> [60113312, 2053241056, 23424616]
# False
# 23424584 <=====> [60113312, 2053241056, 23424616, 22723904]
# 23424520 <=====> [60113312, 2053241056, 23424616]
# False
# 23424584 <=====> [60113312, 2053241056, 23424616, 22723904]
# 23424520 <=====> [60113472, 2053241056, 23424616]
# False
# 23424584 <=====> [60113312, 2053241056, 23424616, 22723904]
# 23424520 <=====> [60113472, 2053241056, 23424616]
# False
# ['huashen', 20, ['student', 'male', '1.72'], 'next']
# ['yang', 20, ['student', 'male', '1.72']]
# 23424328 <=====> [60113536, 2053241056, 23424488]
# 23424520 <=====> [60113472, 2053241056, 23424616]
# False
case3():
# 13463112 <=====> [13648288, 2053241056, 13463144]
# 13463048 <=====> [13648288, 2053241056, 13463016]
# False
# 13463112 <=====> [13648288, 2053241056, 13463144, 12565824]
# 13463048 <=====> [13648288, 2053241056, 13463016]
# False
# 13463112 <=====> [13648288, 2053241056, 13463144, 12565824]
# 13463048 <=====> [13648448, 2053241056, 13463016]
# False
# 13463112 <=====> [13648288, 2053241056, 13463144, 12565824]
# 13463048 <=====> [13648448, 2053241056, 13463016]
# False
# ['huashen', 20, ['student', 'male'], 'next']
# ['yang', 20, ['student', 'male', '1.72']]
# 13462888 <=====> [13648512, 2053241056, 13462920]
# 13463048 <=====> [13648448, 2053241056, 13463016]
# False
# 深拷贝和浅拷贝
# 复制的深度,引用地址——》值
# 复制的越深,说明两个对象之间的关联性就越小
# 赋值操作,会改变引用地址
# 数字、元组、字符串的改变,因为是不可变对象,所以引用地址改变l
# 列表、字典、集合是可变对象,对其操作(非赋值)可能会改变元素的地址(元素可能为可变对象)但不会改变最外层的引用
# 使用id(obj)查看内存地址
# 浅复制、深复制都不是简单的拿到引用地址,而是获取值,但是浅复制在1一层,而深复制在第五层
# 切片、copy.copy()、list、set 可以实现浅拷贝
# copy.deepcopy() 实现深拷贝
def showId(x,y):
print(id(x), '<=====>', [id(ele) for ele in x])
print(id(y), '<=====>', [id(ele) for ele in y])
if x is y:
return print(True)
return print(False)
def case1():
# 1、正常情况下
info = ['huashen', 20, ['student','male']]
info1 = info
showId(info,info1)
# 发生改动
info.append('next')
showId(info,info1)
info1[0] = 'yang'
showId(info,info1)
info1[2].append('1.72')
showId(info,info1)
info = ['xxx', 20, ['student','male']]
showId(info,info1)
# 正常的 = 赋值,是将两个变量的引用复制了
# 所以可见,任意一边改动,只要不是重新赋值,都不会改变引用内存地址,两边的值都相同
...
def case2():
# 2、浅复制,使用copy
import copy
info = ['huashen', 20, ['student','male']]
info1 = copy.copy(info)
showId(info, info1)
# 发生改动
info.append('next')
showId(info, info1)
info1[0] = 'yang'
showId(info, info1)
info1[2].append('1.72')
showId(info, info1)
print(info, '\n', info1) # 为列表的元素的改动,同步了
info = ['xxx', 20, ['student','male']]
showId(info, info1)
# 浅复制的时候,两个对象的引用地址发生变化,但是指向的内存地址的内容还是一样的
...
def case3():
# 2、浅复制,使用copy
import copy
info = ['huashen', 20, ['student', 'male']]
info1 = copy.deepcopy(info)
showId(info, info1) # 在复制的时候,列表的引用地址就发生变化了
# 发生改动
info.append('next')
showId(info, info1)
info1[0] = 'yang'
showId(info, info1)
info1[2].append('1.72')
showId(info, info1)
print(info, '\n', info1) # 为列表的元素的改动,不发生关联
info = ['xxx', 20, ['student', 'male']]
showId(info, info1)
# 深复制的时候,虽然值相同,列表的引用地址,嵌套列表的引用地址都发生了变化,
# 深复制时,获取的时复制对象的值,而内存地址(引用)重新分配
...