首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python列表赋值,复制,深拷贝以及5种浅拷贝详解

Python列表赋值,复制,深拷贝以及5种浅拷贝详解 概述 在列表复制这个问题,看似简单的复制却有着许多的学问,尤其是对新手来说,理所当然的事情却并不如意,比如列表的赋值、复制、浅拷贝、深拷贝等绕口的名词到底有什么区别和作用呢..., 5] [100, 2, 3, 4, 5] 可以看到,更改赋值后的L2后L1同样也会被更改,看似简单的“复制”,在Python中,列表属于可变对象,而对可变对象的复制其实就是将列表的内存空间类似C中的指针再次指向新的变量名...浅拷贝列表中的元素为不可变对象时,我们可以用以下方法对列表进行赋值: import copy # 定义一个新列表 L0 = [1, 2, 3, 4, 5] print(L0) print('-'*40...2]时,L0中的可变对象L0[2]也发生了改变,那么怎么实现真正的完全的拷贝呢?...深拷贝 利用copy模块中的deepcopy进行深拷贝: import copy L0 = [1, 2, [3], 4, 5] print(L0) L2 = copy.deepcopy(L0) L2[2

4.9K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    python列表中的赋值与深浅拷贝

    首先创建一个列表 a=[[1,2,3],4,5,6] 一、赋值 a=[[1,2,3],4,5,6] b=a a[0][1]='tom' print(a) print(b) 结果: [[1, 'tom',...b=a b[0][1]='tom' print(a) print(b) 结果: [[1, 'tom', 3], 4, 5, 6] [[1, 'tom', 3], 4, 5, 6] 总结:赋值不管是对a列表改变还是对...b列表改变, 只要改变其中一个,另一个也会跟着变,这是因为a 和b共用一块内存,没有创建新的内存, 他们是相同的,他们指向同一个内存区域。...,拷贝第一层数据,不拷贝内部子元素 在本代码中,b列表重新开辟了一块内存放元素【b【0】,4,5,6】,也就是第一层内容, 然后b【0】的位置指向了a【0】指向的内存位置 三、深拷贝   使用copy函数...重新开辟一块内存,存放拷贝列表的所有内容。

    91740

    列表复制 之 直接赋值 浅拷贝 和 深度拷贝的分析

    列表复制 之 直接赋值 浅拷贝 和 深度拷贝的分析 1.三者简述 a....2.程序举例 现创建一个列表a,列表里的子对象也是列表,并进行赋值,浅拷贝,和 深度拷贝操作: ?...可以看到,我只改变了列表a,但是b也跟着变化了,c 和 d却没有变化 说明:赋值操作其实不是真的拷贝,它只是令变量b指向了a所指向的对象,他们两个其实共同指向一个对象,类似于C++中的引用!...而拷贝操作,无论深浅,都是相当于新建了一个新的列表,这个列表c 和 d 与源列表 a其实是独立的,所以列表c和d并无变化! 2.2浅拷贝和深度拷贝的区别 现在对列表a的子对象进行操作!...所以浅拷贝不能说是创建了一个完全独立的新的列表,而深度拷贝,可以看出,真的就是生成了一个完全不相关的新的列表d!不管a怎么变,d列表我自岿然不动

    61610

    python拷贝和深拷贝

    python中的赋值是按引用来传递的,如果不是赋值而是拷贝,那就需要用到copy模块了,这就不得不谈浅拷贝和深拷贝了。 浅拷贝copy() #!.../usr/bin/python  import copy  class MyClass:     def __init__(self, name):         self.name = name     .../usr/bin/python  import copy  class MyClass:     def __init__(self, name):         self.name = name     ...,如果浅拷贝,那么系统就新建一个列表,它的每个元素都指向原来列表的每个元素(就像C语言里的指针数组),输出的时候就把它各元素指向的母体元素内容显示出来,所以list1追加了f元素以后list2并没有显示...对于深拷贝来说没有任何改变,因为深拷贝是新建一个列表,把原列表的内容原封不动拷过来,拷过来以后它和原列表一模一样,至于原列表后来做了什么改变根本不关它的事。形象理解就是浅拷贝是活的,深拷贝是死的。

    42740

    python拷贝与浅拷贝

    python中的可变对象包括:list、dict、set。  python中的赋值语句不会创建对象的拷贝,仅仅只是将变量名称绑定到一个对象上。...创建浅拷贝 仍以python列表为例,通常我们会用list()函数来复制一个列表,这个复制过程,就是一个浅拷贝。代码示例: ? 可以看到,通过浅拷贝方式,确实是复制了一个列表。...复制前后两个变量的id不同,两个变量指向两个不同的内存地址,且修改其中一个列表中的值,对另一个列表不会产生影响。...而之所以称这种复制方式为浅拷贝,是因为这种拷贝只对一层对象有效,当列表中有子对象时,对子对象的修改将同时影响原始对象和拷贝对象。代码示例: ?...创建深拷贝 python标准库中的copy模块提供了创建python对象的浅拷贝和深拷贝的接口。使用deepcopy()函数,可以创建一个对象的深拷贝。代码示例: ?

    68420

    Python中浅拷贝与深拷贝

    Python内置的集合是可变的,如列表、数据集和集合都可以通过在现有集合上调用它们的原来函数进行复制: new_list = list(original_list) new_dict = dict(original_dict...) new_set = set(original_set) 但是,此方法不适用于自定义对象,而且在此基础上,它只创建浅拷贝...对于复合对象,如列表、数据集和集合,有一个重要的区别:浅拷贝和深拷贝 A...这些没有复制,只是在复制的列表中再次被引用。 因此,当在xs中,此修改反映在ys也是一样,那是因为两个列表共享相同的子对象。...这些问题的答案在Python标准库中的copy模块里。该模块为创建任意Python对象的浅拷贝和深拷贝提供了一个简单的接口。 深拷贝 让我们重复前面的列表复制示例,但有一个重要的区别。...Point(0, 1), Point(5, 6)) >>> srect Rectangle(Point(0, 1), Point(5, 6)) >>> rect is srect False 还记得前面的列表示例是如何说明深拷贝和浅拷贝之间的区别的吗

    1.1K10

    Python 深浅拷贝

    Python拷贝和深度拷贝 今天面试了一个计算机专业研究生且大学出身也很好,但是面试的结果来看并没有达到我的预期。很多基础计算机的知识貌似都不是很懂,更别说对操作系统、编译原理和算法的深度造化了。...虽然有点扯淡,还是开始咱们今天聊一下Python的浅拷贝和深度拷贝。...对象赋值 在Python中大致可以分为immutable和mutable两种数据类型,比如:字符串字面值、数字、元组等这些是immutable类型,列表、字典等是mutable类型。...我们先来看一下python对象赋值是如何赋值的? #!...看一下产生浅拷贝的效果操作: 使用切片[:]操作 使用工厂函数(如list/dir/set) 使用copy模块中的copy()函数 深拷贝拷贝是完全真正意义上的拷贝,是完全复制所有对象元素。

    80680

    C# 深拷贝_python的浅拷贝和深拷贝

    在本文中,将通过示例讨论C#中的浅拷贝和深拷贝。这是上一篇文章的续篇。因此,在继续本文之前,请阅读以前的文章,其中之前使用示例讨论了C#中的原型设计模式。 什么是深拷贝和浅拷贝?...因此对拷贝出来的副本对象的修改不会反映到被拷贝的源对象上。深拷贝本质上就是软件设计模式里的原型模式。与C#对应的接口是ICloneable。)...2)浅拷贝:简单的复制栈的内容,对于值类型,栈内容是其值本身,对于引用类型,其值为托管堆的内存地址,对拷贝的对象的修改会反映到被拷贝的对象。...【示例】浅拷贝: 如果是“浅拷贝”,它将从现有对象创建新对象,然后将当前对象的值类型字段拷贝到新对象。...分别定义了一个浅拷贝方法ShallowCopy()和一个深拷贝的方法DeepCopy()。

    74120
    领券