[python 学习]浅拷贝和深拷贝

import copy

l=[1,3.14,[2,4,6]]

l2=copy.copy(l)

print(l)

print(l2)

print(id(l))

print(id(l2))

print(‘------------------------‘)

for i in l:

print(id(i))

print(‘------------------------‘)

for i in l2:

print(id(i))

#可见虽然l和l2的地址不一样,但里里面的内容都是一样的

#copy也就是浅拷贝,l和l2的不同相当于两个指针的地址不一样

‘‘‘

浅拷贝特点:

浅拷贝后两个序列的内存地址不相同

两个序列,相同索引的元素的内存地址 相同

‘‘‘

print(‘------------------------‘)

print(‘------------------------‘)

print(‘------------------------‘)

l3=copy.deepcopy(l)

print(‘------------------------‘)

for i in l3:

print(id(i))

#可见深拷贝以后地址明显不同

原文地址:https://www.cnblogs.com/cyber-shady/p/11520450.html

时间: 2024-10-06 07:54:44

[python 学习]浅拷贝和深拷贝的相关文章

Python中浅拷贝和深拷贝的区别

Python中浅拷贝和深拷贝的区别 浅拷贝和深拷贝示意图 如上图,简单点说 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2. copy.deepcopy 深拷贝 拷贝对象及其子对象 数字,字符串是不可变类型 列表,字典是可变类型 我们看下面的案例 案例一:浅拷贝 >>> import copy     #导入copy模块                >>> s=['name',['savings',100.0]] #赋值给s >

python之浅拷贝与深拷贝

1. 浅拷贝 浅拷贝是对于一个对象的顶层拷贝通俗的理解是:拷贝了引用,并没有拷贝内容 In [10]: a = [11,22,33] In [11]: b = a In [12]: id(a) Out[12]: 140343572333832 In [13]: id(b) Out[13]: 140343572333832 In [14]: a[0] = 'aa' In [15]: a Out[15]: ['aa', 22, 33] In [16]: b Out[16]: ['aa', 22, 3

python之浅拷贝和深拷贝

1.浅拷贝 1>赋值:从下面的例子我们可以看到赋值之后新变量的内存地址并没有发生任何变化,实际上python中的赋值操作不会开辟新的内存空间,它只是复制了新对象的引用,也就是说除了b这个名字以外,没有其他的内存开销,这时如果修改了a的值,就会影响b的值,同理,如果修改b的值,也会影响a的值. 2>浅拷贝是对引用的拷贝,它只拷贝了副对象,所以说id(a)!=id(c),那么对象内部的资源依然是引用,所以内部id(a[0])==id(c[0]).id(a[2][0])==id(c[2][0]),那

Python 列表浅拷贝与深拷贝

浅拷贝 shallow copy 和深拷贝 deep copy list.copy() 浅拷贝:复制此列表(只复制一层,不会复制深层对象) 等同于 L[:] 举例: 浅拷贝: a = [1.1, 2.2] # a = [1.1, 2.2] b = [1, 2, a] # b = [1, 2, [1.1, 2.2]] c = b.copy() # c = [1, 2, [1.1, 2,2]] a[0] = 1.123 b =  [1, 2, [1.123, 2.2]] c =  [1, 2, [1

python列表--浅拷贝与深拷贝的区别

首先得说说列表为什么需要拷贝,就是为了解决简单赋值操作,传地址的问题,因为赋值过去的列表,其实指向的是同一个地址,问题说明看代码 a = [1,2,3] b = a # list类型,简单赋值操作,是传地址 print(id(a)) print(id(b)) b[1] = 6 print(b) print(a) 执行结果,输出的是: 2460317409864 2460317409864 [1, 6, 3] [1, 6, 3] #同一地址,修改b的列表,a也会同时改变. 为了解决以上问题,lis

Python学习笔记4(浅拷贝、深拷贝)

注:此博客搬运自http://www.cnblogs.com/Eva-J/p/5534037.html,有需要的朋友希望你们去原博客观看,给予原创更多的尊重. 注:我写一遍是为加深自己的印象,备查也方便,内容可能根据自己的情况有所删减,所以还是希望你们去原博客观看,谢谢~ 1.Python的变量及其存储形式 在Python学习笔记1中我们简单提到过变量这个概念,那么现在简单理解一下变量具体是如何存储数据的. Python采用了引用语义的方式存储变量,存储的内容只是这个变量的值所在的内存地址,而不

Python学习教程:Python列表赋值,复制,深拷贝及5种浅拷贝详解

Python学习教程:Python列表赋值,复制,深拷贝及5种浅拷贝详解 概述 在列表复制这个问题,看似简单的复制却有着许多的学问,尤其是对新手来说,理所当然的事情却并不如意,比如列表的赋值.复制.浅拷贝.深拷贝等绕口的名词到底有什么区别和作用呢? 列表赋值 # 定义一个新列表l1 = [1, 2, 3, 4, 5]# 对l2赋值l2 = l1print(l1)l2[0] = 100print(l1) 示例结果: [1, 2, 3, 4, 5][100, 2, 3, 4, 5] 可以看到,更改赋

流畅的python学习笔记第八章:深拷贝,浅拷贝,可变参数

首先来看赋值,浅拷贝,深拷贝. 一赋值: a=['word',2,3] b=a print id(a),id(b) print [id(x) for x in a] print [id(x) for x in b] a[0]='hello' print a print b E:\python2.7.11\python.exe E:/py_prj/fluent_python/chapter8.py 24709080 24709080 [24410496, 21298404, 21298392] [

Python中的赋值、浅拷贝、深拷贝

在理解浅拷贝和深拷贝之前,首先要理解学习一下变量在Python中是怎样存储的: 变量的类型是分值引用与地址引用两种. python的一切变量都是对象,变量的存储,采用了地址引用的方式,存储的只是一个变量的值所在的内存地址,而不是这个变量的只本身. 在Python中,是有多种数据类型:bool.int.long.float.string.list.dict.tuple.set; 其中可分为基本数据类型和复杂数据结构: 基本数据类型:bool.int.long.float.string; 复杂数据结