python默认变量赋值是以python对象的形式赋值,改变原来的变量值,所有相关变量值都会改变
如何区分或者控制各个变量?
针对不可变常量
import copy
a = 'test'
print("=====赋值=====")
b=a
print(a)
print(b)
print(id(a))
print(id(b))
print("=====浅拷贝=====")
b=copy.copy(a)
print(a)
print(b)
print(id(a))
print(id(b))
print("=====深拷贝=====")
b=copy.deepcopy(a)
print(a)
print(b)
print(id(a))
print(id(b))
输出结果:

综上可知:不可变类型没有被拷贝的说法,不管操作都是同一个地址内容
对于可变对象
import copy
a=[1,2,3]
print("=====赋值=====")
b=a
print(a)
print(b)
print(id(a))
print(id(b))
print("=====浅拷贝=====")
b=copy.copy(a)
print(a)
print(b)
print(id(a))
print(id(b))
print("=====深拷贝=====")
b=copy.deepcopy(a)
print(a)
print(b)
print(id(a))
print(id(b))
返回结果

综上可知,可变类型浅拷贝和深拷贝均会开辟新的地址
import copy
a = [1, 2, 3, 4, ['a', 'b']] #原始对象
b = a #赋值,传对象的引用
c = copy.copy(a) #对象拷贝,浅拷贝
d = copy.deepcopy(a) #对象拷贝,深拷贝
a.append(5) #修改对象a
a[4].append('c') #修改对象a中的['a', 'b']数组对象
print( 'a = ', a )
print( 'b = ', b )
print( 'c = ', c )
print( 'd = ', d )
返回结果

综上发现:
1、复制对象b随原列表a一起变化
2、外层append 添加元素时,浅copy b不会随原列表a变化而变化
3、内层添加元素时,浅copy会随原列表a变化而变化
4、无论原列表a如何变化,深copy d都保持不变
心得:
想要更新原列表,建议操作深度copy的列表
本文详细讲解了Python中不可变类型与可变类型在赋值、浅拷贝和深拷贝时的行为差异,以及如何通过`copy`模块实现对象复制,重点在于理解浅拷贝和深拷贝对变量独立性的影响。

222

被折叠的 条评论
为什么被折叠?



