Python中引用复制、分片复制、完整复制

Python中引用复制、分片复制、完整复制

首先直接看例子:

>>> l1=[1,2,3]
>>> l11 = l1
>>> l2=[4,5,l1]
>>> l2
[4, 5, [1, 2, 3]]
>>> l3 = l2[:]
>>> l3
[4, 5, [1, 2, 3]]
>>> import copy
>>> l4 = copy.deepcopy(l2)
>>> l4
[4, 5, [1, 2, 3]]
>>> l2[1] = 6
>>> l2
[4, 6, [1, 2, 3]]
>>> l3
[4, 5, [1, 2, 3]]
>>> l4
[4, 5, [1, 2, 3]]
>>> l1[0] = 7
>>> l1
[7, 2, 3]
>>> l11
[7, 2, 3]
>>> l2
[4, 6, [7, 2, 3]]
>>> l3
[4, 5, [7, 2, 3]]
>>> l4
[4, 5, [1, 2, 3]]

说明:

  1. 使用共享对象应用的方式来复制,只会给现存的对象添加一个新的引用,并不会在内存中生成新的对象(看l11和l1的对比)。
  2. 使用分片的方法来复制列表等序列类型,只会复制当前序列的内容,不会复制序列内的数据结构(看l1、l2、l3的对比)。
  3. 字典拥有copy方法也可以进行复制,不过局限性同2。
  4. copy标准模板库能够生成完整的拷贝,消除上一条中不能复制序列内数据结构的问题(看l3和l4值的对比)。
  5. 2和3叫做顶层复制,无法复制嵌套的数据结构。
时间: 2024-08-04 19:18:09

Python中引用复制、分片复制、完整复制的相关文章

python中引用

python中的可变类型与不可变类型: 在讲python深浅拷贝之前,我们首先应该明白python中元素的类型:主要分为可变类型和不可变类型. 可变类型,就是值可以改变的类型有两个: 列表:list 字典:dict 不可变类型就是值不可以改变的类型,主要有三大类: 数值类型:int,long,bool,float 字符串:str 元组:tuple 参数传递过程中的可变类型与不可变类型,见程序 1 def test1(numsTemp): 2 print(id(numsTemp)) 3 numsT

Python中引用自定义模块

学习了一小段时间的Python,始终停滞在简单的语法上,不能真正体会到Python的强大之处.今天学习了自定义模块的引用方法.当引用模块时,编译器会先在当前目录,接着去sys.path.Python的安装目录去寻找你引用的模块,如果没有的话,就会报错. 第一种情况,你的模块和你要使用的模块在同一目录下.Hello.py是一个模块,里面有一个打印Hello, World的方法Hello().test.py是一个测试程序,它将引用Hello.py中的hello()方法.因为它和模块在同一目录,所以可

python中的“赋值与深浅拷贝”

Python中,赋值与拷贝(深/浅拷贝)之间是有差异的,这主要源于数据在内存中的存放问题,本文将对此加以探讨. 1 赋值(添加名字) 赋值不会改变内存中数据存放状态,比如在内存中存在一个名为data的数据,此时若执行语句data_01 = data,则现在该份数据有了两个名称(data和data_01),其余都不发生改变,使用任何一个名称对数据进行操作,那么用另外一个名称拿数据时,数据会呈现之间发生的改变.示例如下: 图中,给列表分配了两个名称a与b,对a做改变时b会同样改变,对b做改变时a也会

Python中__builtin__和__builtins__的深入探讨

0.说明 这里的说明主要是以Python 2.7为例,因为在Python 3+中,__builtin__模块被命名为builtins,下面主要是探讨Python 2.x中__builtin__模块和__builtins__模块的区别和联系. 1.名称空间(Namespace) 首先不得不说名称空间,因为名称空间是Python中非常重要的一个概念,所谓名称空间,其实指的是名称(标识符)到对象的映射. 在一个正常的Python程序的执行过程中,至少存在两个名称空间: 内建名称空间 全局名称空间 如果

python 如何引用上级目录的模块

今天,做一个测试,想在当前python中引用上层目录的模块:呃,一番搜索. 先看一下目录情况: [[email protected] test]# tree . ├── t1.py ├── t2 │   └── t2.py └── xxu     └── test.py 2 directories, 3 files 其实,最开始仅仅是想,test.py中可以调用t1.py中函数: 直接使用的效果: [[email protected] xxu]# cat test.py  #/usr/bin/e

python中深复制与浅复制

转载:http://blog.csdn.net/vicken520/article/details/8227524 java中也经常碰见这种问题.时间原因就不写java方面啦 Python深复制浅复制or深拷贝浅拷贝 简单点说 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象.2. copy.deepcopy 深拷贝 拷贝对象及其子对象 用一个简单的例子说明如下: >>>import copy>>>a = [1, 2, 3, 4, ['a', 

转载:python中的copy模块(浅复制和深复制)

主要是介绍python中的copy模块. copy模块包括创建复合对象(包括列表.元组.字典和用户定义对象的实例)的深浅复制的函数. ########copy(x)########创建新的复合对象并通过引用复制x的成员来创建x的浅复制.更加深层次说,它复制了对象,但对于对象中的元素,依然使用引用.对于内置类型,此函数并不经常使用.而是使用诸如list(x), dict(x), set(x)等调用方式来创建x的浅复制,要知道像这样直接使用类型名显然比使用copy()快很多.但是它们达到的效果是一样

Python中复制、深拷贝和浅拷贝的区别

深拷贝定义(deepcopy) 在Python中,由于一切皆对象,所以任何变量都可以被引用,也即可以被赋值给任何变量.但是在Python中,给变量赋值,是区分的,一般情况下,Python中的变量赋值都是浅拷贝,如果需要使用深拷贝,需要特别指定. 深拷贝是对原对象的"复制以及粘贴",其实就是在内存中重新开辟了一个新的内存空间来存放这一份数据,两个变量其实是两个不一样的变量,仅仅是数据值相同而已,对两个变量的操作不会相互影响. 浅拷贝(copy) 在Python中进行数据的浅拷贝时,如果此

Python中的赋值(复制)、浅拷贝与深拷贝

https://zhuanlan.zhihu.com/p/54011712 首先需要了解下几个概念 变量:是一个系统表的元素,拥有指向对象的连接空间 对象:被分配的一块内存,存储其所代表的值 引用:是自动形成的从变量到对象的指针 类型:属于对象,而非变量 不可变对象:一旦创建就不可修改的对象,包括字符串.元组.数值类型 (该对象所指向的内存中的值不能被改变.当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址.) 可变对象: