返回顶部
首页 > 资讯 > 后端开发 > Python >Python面试高频问题浅拷贝和深拷贝源码分析
  • 205
分享到

Python面试高频问题浅拷贝和深拷贝源码分析

2023-07-06 01:07:24 205人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要介绍“python面试高频问题浅拷贝和深拷贝源码分析”,在日常操作中,相信很多人在Python面试高频问题浅拷贝和深拷贝源码分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python面试高频问

这篇文章主要介绍“python面试高频问题浅拷贝和深拷贝源码分析”,在日常操作中,相信很多人在Python面试高频问题浅拷贝和深拷贝源码分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python面试高频问题浅拷贝和深拷贝源码分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

变量赋值

在Python可变数据类型(列表,字典,集合)中,把一个可变数据类型的变量赋给另一个变量,这两个变量引用的是同一个对象,内存地址是一样的,修改当中的一个变量,另一个变量相应也会被修改。

举一个例子:

l1=['a','b','c']l2=l1print(id(l1))print(id(l2))l2.append('d')print("************")print(id(l1))print(l1)print(id(l2))print(l2)输出:838366483528838366483528************838366483528['a', 'b', 'c', 'd']838366483528['a', 'b', 'c', 'd']

输出结果这里就不再多做解释了, l1 和l2的地址相同,所以彼此间会产生影响。

浅拷贝

拷贝了一个对象的最顶层,只拷贝了对象的"引用"。

举一个前面文章的例子,list中只有一层,即元素中不包含其他list。

l3=['x','y','z']l4=list(l3)print(id(l3))print(id(l4))l4.append('a')print(l3)print(l4)输出831456302152831480344136['x', 'y', 'z']['x', 'y', 'z', 'a']

从结果可以看到,l3 和l4的地址不同,所以彼此间不会发生影响。

我们再上一个例子,让l3中的第一个元素是一个list。

l3=[['x','y','z'],'a','b']l4=list(l3)print(id(l3))print(id(l4))l4.append('c')print(l3)print(l4)结果533336249416533337391240[['x', 'y', 'z'], 'a', 'b'][['x', 'y', 'z'], 'a', 'b', 'c']

结果完全符合预期,因为第一个元素是list,那么他也是有地址的,我们对其进行打印。

print(id(l3[0]))print(id(l4[0]))结果533336248904533336248904

我们发现l3[0]和l4[0]的地址居然一样,再执行如下代码。

l3[0].append('yy')print(l3)print(l4)结果[['x', 'y', 'z', 'yy'], 'a', 'b'][['x', 'y', 'z', 'yy'], 'a', 'b', 'c']

结果符合预期,修改l3[0]的值也影响了l4[0]。那么我们怎么做才能让l3[0]和l4[0]彼此也不发生影响呢,这就需要引入深拷贝。

深拷贝

深拷贝对对象中的每一层都进行了拷贝,拷贝后的对象与原对象完全独立,没有任何关系。要想实现深拷贝需要使用copy 模块中的deepcopy方法。

import copyl3=[['x','y','z'],'a','b']#l4=list(l3) #浅拷贝,使用=copy.copy(l3)也可以实现浅拷贝l4=copy.deepcopy(l3) #深拷贝l4.append('c')print(id(l3[0]))print(id(l4[0]))l3[0].append('yy')print(l3)print(l4)输出407168435784407166887304[['x', 'y', 'z', 'yy'], 'a', 'b'][['x', 'y', 'z'], 'a', 'b', 'c']

可以看到l3[0]和l4[0],已经完全独立,彼此没有影响了。

总结浅拷贝和深拷贝

话不多说,用两张图就可以进行简单解释:

浅拷贝,如下图:

Python面试高频问题浅拷贝和深拷贝源码分析

深拷贝,如下图:

Python面试高频问题浅拷贝和深拷贝源码分析

到此,关于“Python面试高频问题浅拷贝和深拷贝源码分析”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Python面试高频问题浅拷贝和深拷贝源码分析

本文链接: https://lsjlt.com/news/357164.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python面试高频问题浅拷贝和深拷贝源码分析
    这篇文章主要介绍“Python面试高频问题浅拷贝和深拷贝源码分析”,在日常操作中,相信很多人在Python面试高频问题浅拷贝和深拷贝源码分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python面试高频问...
    99+
    2023-07-06
  • Python面试高频问题:浅拷贝和深拷贝
    在python的面试中,浅拷贝和深拷贝是一个比较难的问题,六成人根本没听过浅拷贝和深拷贝,三成人仅仅了解二者的基础概念和简单的区别。仅仅不到一成人能够准确说出二者的区别,并可以完成相关代码demo的编写!今天让我们来把这个难点搞定,为面试增...
    99+
    2023-05-14
    Python 浅拷贝 深拷贝
  • 分析JavaScript浅拷贝和深拷贝
    本篇内容主要讲解“分析JavaScript浅拷贝和深拷贝”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“分析JavaScript浅拷贝和深拷贝”吧!一、直接赋值对象是引用类型,如果直接赋值给另外一...
    99+
    2023-06-25
  • 浅拷贝和深拷贝原理分析
    目录前言关于引用关于浅拷贝和深拷贝浅拷贝深拷贝序列化如何选择拷贝方式其他拷贝方式前言 因为它涉及到对象的引用关系,涉及到 Java 是传值还是传递引用关系,这通常是面试的重点。 所以...
    99+
    2024-04-02
  • python深拷贝和浅拷贝之简单分析
    title: python 深拷贝和浅拷贝 tags: python,copy,deepcopy grammar_cjkRuby: true --- python 深拷贝和浅拷贝 python的变量的赋值都是引用 把一个变量赋值给一个...
    99+
    2023-01-30
    简单 python
  • 如何解析Python深拷贝与浅拷贝问题
    这篇文章将为大家详细讲解有关如何解析Python深拷贝与浅拷贝问题,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。在平时工作中,经常涉及到数据的传递,在数据传递使用过程中,可能会发生数据被修改...
    99+
    2023-06-16
  • 通过源码分析iOS中的深拷贝与浅拷贝
    前言 关于iOS中对象的深拷贝和浅拷贝的文章有很多,但是大部分都是基于打印内存地址来推导结果,这篇文章是从源码的角度来分析深拷贝和浅拷贝。 深拷贝和浅拷贝的概念 拷贝的方式有两种:...
    99+
    2022-06-04
    源码 深拷贝 浅拷贝
  • 如何分析web前端中的深拷贝和浅拷贝
    小编今天带大家了解如何分析web前端中的深拷贝和浅拷贝,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“如何分析web前端中的深拷贝和浅...
    99+
    2023-06-05
  • 如何解析Python中的赋值、浅拷贝和深拷贝
    这篇文章给大家介绍如何解析Python中的赋值、浅拷贝和深拷贝,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。先明确几点不可变类型:该数据类型对象所指定内存中的值不可以被改变。(1)、在改变某个对象的值时,由于其内存中的...
    99+
    2023-06-22
  • Python可变与不可变数据和深拷贝与浅拷贝实例分析
    这篇文章主要介绍“Python可变与不可变数据和深拷贝与浅拷贝实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python可变与不可变数据和深拷贝与浅拷贝实例分析”文章能帮助大家解决问题。浅拷...
    99+
    2023-06-29
  • 怎么从C++的角度分析PYTHON的深浅拷贝
    这篇文章主要讲解了“怎么从C++的角度分析PYTHON的深浅拷贝”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么从C++的角度分析PYTHON的深浅拷贝”吧!今天看到python的列表深浅...
    99+
    2023-06-04
  • JavaScript中内存空间、赋值和深浅拷贝的示例分析
    这篇文章将为大家详细讲解有关JavaScript中内存空间、赋值和深浅拷贝的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。JavaScript的内存空间在Java...
    99+
    2024-04-02
  • Python基础学习之深浅拷贝问题及递归函数练习
    目录一、深浅拷贝问题二、递归函数练习1. 求阶乘2. 猴子吃桃问题3. 打印斐波那契数列一、深浅拷贝问题 在实际工作中,经常涉及到数据的传递,在数据传递使用过程中,可能会发生数据被修...
    99+
    2024-04-02
  • 如何解决js数据类型和引用类型以及深浅拷贝和内存分配问题
    本篇文章给大家分享的是有关如何解决js数据类型和引用类型以及深浅拷贝和内存分配问题,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。js 深浅拷贝...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作