import copy
list = [1, [2, 3 ,4], 5, 6]
list_01 = copy.copy(list)
print(type(id(list))) # int
print(id(list)) #
# id(): CPython uses the object's memory address.
print(id(list_01))
print(id(list[0])) #
# 列表的首元素地址并不等于列表的地址
# list 和 list_01 列表中所有元素的地址相同,包括内层列表中的元素
# print(id(list_01[0]))
# print(id(list[1]))
# print(id(list_01[1]))
# print(id(list[2]))
# print(id(list_01[2]))
# print(id(list[1][0]))
# print(id(list_01[1][0]))
""""copy"""
'''不涉及表中表结构(可变对象),则修改一方不影响另一方的值'''
# 修改 list[0]
# list[0] = -1
# print(list[0])
# print(list_01[0])
# """
# -1
# 1 """
# 修改list_01[0]
# list_01[0] = 100
# print(list[0])
# print(list_01[0])
"""
1
100 """
""""copy"""
'''涉及表中表结构(可变对象),则修改一方的值影响另一方的值'''
# list_01[1][0] = 200
# print(list)
# print(list_01)
""""deepcopy"""
'''无论是否包含表中表结构(可变对象),修改一方的值不影响另一方的值'''
list_02 = copy.deepcopy(list)
# 修改备份列表 list_02
# list_02[1][0] = 44
# print(list)
# print(list_02)
# [1, [2, 3, 4], 5, 6]
# [1, [44, 3, 4], 5, 6]
# 修改备份列表 list_02
# list_02[0] = 2
# print(list)
# print(list_02)
# [1, [2, 3, 4], 5, 6]
# [2, [2, 3, 4], 5, 6]
# 修改原列表 list
# list[0] = 0
# print(list)
# print(list_02)
# [0, [2, 3, 4], 5, 6]
# [1, [2, 3, 4], 5, 6]
# 修改原列表 list
# list[1][0] = 0
# print(list)
# print(list_02)
# [1, [0, 3, 4], 5, 6]
# [1, [2, 3, 4], 5, 6]
python 中的copy与deepcopy
最新推荐文章于 2020-06-18 10:14:21 发布