关于list tuple copy 和 deepcopy 的区别是什么?【面试题详解】

今天爱分享给大家带来关于list tuple copy 和 deepcopy 的区别是什么?【面试题详解】,希望能够帮助到大家。
tuple:



a = (1, 2, 3, [4, 5, 6, 7], 8)
a[3] = 3  //typeerror
a[3][3] = 9 // a (1, 2, 3, [4, 5, 6, 9], 8)

列表是可变数据类型,数据的值可以修改的

这里只是修改了元祖子对象的值,而不是修改了元祖的值

修改可变类型的值不会改变内存id,因此元祖的引用还是没有发生变化

可以这么理解,只要不修改元祖中值的内存id,那么就可以进行“修改元祖”操作扩展,

面试官可能会问到:元祖是否可以被修改?

答:元祖是不可变数据类型,因此不能修改元祖中的值,但是如果元组中有可变数据类型,那么可以修改可变数据类型中的值,修改可变数据类型的值并不会使其内存id发生变化,所以元祖中元素中的内存id也没有改变,因此就做到了“修改元祖”操作

list:


a = [1,2,[3,4]]
b = a
c = a[:]
d = a.copy()
e = copy.deepcopy(a)

id(a), id(b), id(c), id(d), id(e)  // 只有a b 是同一个指向
 >>> (4398429512, 4398429512, 4398398664, 4398429576, 4398429192)

a.append(5) // 只有b跟着改变
a, b, c,d,e
([1, 2, [3, 4], 5], [1, 2, [3, 4], 5], [1, 2, [3, 4]], [1, 2, [3, 4]], [1, 2, [3, 4]])

a[2][1] = 7 // 除了deepcopy, 其他都跟着变了
a, b, c,d,e
([1, 2, [3, 7], 5], [1, 2, [3, 7], 5], [1, 2, [3, 7]], [1, 2, [3, 7]], [1, 2, [3, 4]])



copy 仅拷贝对象本身,而不拷贝对象中引用的其它对象。

deepcopy 除拷贝对象本身,而且拷贝对象中引用的其它对象。(子对象)

人已赞赏
Python

对生成器类型的对象实现切片功能【面试题详解】

2020-12-22 14:31:25

Python

代码中经常遇到的_args, *_kwargs 含义及用法。【面试题详解】

2020-12-22 14:35:09

'); })();