欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 赋值 浅拷贝 深拷贝

赋值 浅拷贝 深拷贝

2024/10/23 21:29:42 来源:https://blog.csdn.net/weixin_46770425/article/details/143193696  浏览:    关键词:赋值 浅拷贝 深拷贝

赋值操作

赋值操作(如 b = a)只是将变量 b 指向变量 a 当前指向的对象。这意味着 b 和 a 引用同一个对象。如果对象是可变的(如列表、字典),对对象的修改会反映在所有引用该对象的变量上。

a = [1, 2, 3]
b = a
a[0] = 99
print(a)  # 输出: [99, 2, 3]
print(b)  # 输出: [99, 2, 3]

在这个例子中,a 和 b 引用同一个列表对象。修改 a 的元素会同时影响 b

拷贝操作

拷贝操作会创建一个新的对象,新对象的内容与原对象相同,但它们是不同的对象。Python 提供了多种拷贝方式,包括浅拷贝和深拷贝。

浅拷贝

浅拷贝会创建一个新的对象,但新对象中的子对象仍然是原对象中子对象的引用。

import copya = [1, [2, 3], 4]
b = copy.copy(a)
a[0] = 99
a[1][0] = 88
print(a)  # 输出: [99, [88, 3], 4]
print(b)  # 输出: [1, [88, 3], 4]

在这个例子中,a 和 b 是不同的列表对象,但它们包含的子列表是同一个对象。因此,修改子列表会影响 a 和 b

深拷贝

深拷贝会创建一个新的对象,并且递归地拷贝原对象中的所有子对象。新对象和原对象是完全独立的。

import copya = [1, [2, 3], 4]
b = copy.deepcopy(a)
a[0] = 99
a[1][0] = 88
print(a)  # 输出: [99, [88, 3], 4]
print(b)  # 输出: [1, [2, 3], 4]

在这个例子中,a 和 b 是完全独立的列表对象,修改 a 不会影响 b

总结

  • 赋值操作:只是将变量指向同一个对象,对对象的修改会影响所有引用该对象的变量。

  • 浅拷贝:创建一个新的对象,但子对象仍然是原对象中子对象的引用。

  • 深拷贝:创建一个新的对象,并且递归地拷贝所有子对象,新对象和原对象是完全独立的。

可变对象(Mutable Objects)

可变对象是指在创建后可以修改其内容的对象。常见的可变对象包括:

  • 列表(List):可以通过索引和切片修改元素。

  • 字典(Dictionary):可以通过键修改值。

  • 集合(Set):可以添加和删除元素。

不可变对象(Immutable Objects)

不可变对象是指在创建后不能修改其内容的对象。常见的不可变对象包括:

  • 整数(int)

  • 浮点数(float)

  • 字符串(str)

  • 元组(tuple)

  • 布尔值(bool

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com