Python中如何区分深拷贝与浅拷贝的区别?

2026-06-11 06:361阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计467个文字,预计阅读时间需要2分钟。

Python中如何区分深拷贝与浅拷贝的区别?

比较两个引用是否指向同一对象:`is(a, b)` 检查 `a` 和 `b` 是否指向同一对象;`==` 比较两个对象是否相等。变量 `a`、`b` 和 `c` 分别指向 `[1, 2]` 数组,`id(a)`、`id(b)` 和 `id(c)` 分别返回它们的内存地址。`a==b` 为 `True`,因为它们指向同一对象。

Python中如何区分深拷贝与浅拷贝的区别?

  • is 比较两个引用是否指向同一个对象
  • == 比较两个对象是否相等

>>> a = [1, 2] >>> b = [1, 2] >>> c = a >>> id(a) 140275902517640 >>> id(b) 140275902517960 >>> id(c) 140275902517640 >>> a == b # a、b分别指向的对象值相等 True >>> a is b # a、b分别指向不同的对象 False >>> a is c # a、c指向同一个对象 True

  • 深拷贝:复制了引用和内容
  • 浅拷贝: 仅复制了引用,未复制对象

# 浅拷贝 a、b指向同一个对象地址 >>> a = [1, 2] >>> b = a >>> id(a) 140275902517704 >>> id(b) 140275902517704 >>> a.append(3) # 浅拷贝,修改a的值,b的值随之变化 >>> b [1, 2, 3] # 深拷贝 >>> import copy >>> c = copy.deepcopy(a) >>> id(a) 140275902517704 >>> id(c) 140275902301264 >>> a.append(3) # 深拷贝,修改a的值,c的值不变 >>> c [1, 2] >>> a = [1, 2] # >>> b = [3, 4] >>> c = [a, b] >>> d = copy.deepcopy(c) >>> d [[1, 2], [3, 4]] >>> a.append(3) >>> c [[1, 2, 3], [3, 4]] # 浅拷贝 >>> d [[1, 2], [3, 4]] # 深拷贝 >>> a = [1, 2] # >>> b = [3, 4] >>> c = [a, b] >>> d = copy.copy(c) >>> d [[1, 2], [3, 4]] >>> a[0] = 0 >>> d [[0, 2], [3, 4]] # copy当拷贝一个不可变类型数据时,只会进行浅拷贝 a = [1, 2] b = [3, 4] c = (a, b) d = copy.copy(c)

本文共计467个文字,预计阅读时间需要2分钟。

Python中如何区分深拷贝与浅拷贝的区别?

比较两个引用是否指向同一对象:`is(a, b)` 检查 `a` 和 `b` 是否指向同一对象;`==` 比较两个对象是否相等。变量 `a`、`b` 和 `c` 分别指向 `[1, 2]` 数组,`id(a)`、`id(b)` 和 `id(c)` 分别返回它们的内存地址。`a==b` 为 `True`,因为它们指向同一对象。

Python中如何区分深拷贝与浅拷贝的区别?

  • is 比较两个引用是否指向同一个对象
  • == 比较两个对象是否相等

>>> a = [1, 2] >>> b = [1, 2] >>> c = a >>> id(a) 140275902517640 >>> id(b) 140275902517960 >>> id(c) 140275902517640 >>> a == b # a、b分别指向的对象值相等 True >>> a is b # a、b分别指向不同的对象 False >>> a is c # a、c指向同一个对象 True

  • 深拷贝:复制了引用和内容
  • 浅拷贝: 仅复制了引用,未复制对象

# 浅拷贝 a、b指向同一个对象地址 >>> a = [1, 2] >>> b = a >>> id(a) 140275902517704 >>> id(b) 140275902517704 >>> a.append(3) # 浅拷贝,修改a的值,b的值随之变化 >>> b [1, 2, 3] # 深拷贝 >>> import copy >>> c = copy.deepcopy(a) >>> id(a) 140275902517704 >>> id(c) 140275902301264 >>> a.append(3) # 深拷贝,修改a的值,c的值不变 >>> c [1, 2] >>> a = [1, 2] # >>> b = [3, 4] >>> c = [a, b] >>> d = copy.deepcopy(c) >>> d [[1, 2], [3, 4]] >>> a.append(3) >>> c [[1, 2, 3], [3, 4]] # 浅拷贝 >>> d [[1, 2], [3, 4]] # 深拷贝 >>> a = [1, 2] # >>> b = [3, 4] >>> c = [a, b] >>> d = copy.copy(c) >>> d [[1, 2], [3, 4]] >>> a[0] = 0 >>> d [[0, 2], [3, 4]] # copy当拷贝一个不可变类型数据时,只会进行浅拷贝 a = [1, 2] b = [3, 4] c = (a, b) d = copy.copy(c)