白激浪  
输出结果
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) # 深复制的时候,虽然值相同,列表的引用地址,嵌套列表的引用地址都发生了变化, # 深复制时,获取的时复制对象的值,而内存地址(引用)重新分配 ...

 

posted on 2021-12-04 11:15  白激浪  阅读(31)  评论(0)    收藏  举报