python深浅拷贝的理解和区分

 1 import copy
 2
 3 a1 = [‘s1‘,‘s2‘,‘s3‘]
 4
 5 #可变数据类型
 6 a = [1,2,a1]
 7
 8 b = a
 9   a1.append(‘s4‘)
10 #浅拷贝
11 c = copy.copy(a)
12 #深拷贝
13 d = copy.deepcopy(a)
14
15 #可变数据类型打印
16 print(‘值打印----:‘)
17 print(a1)
18 print(a)
19 print(b)
20 print(c)
21 print(d)
22 print(‘地址打印----:‘)
23 print(id(a1))
24 print(id(a))
25 print(id(b))
26 print(id(c))
27 print(id(d))

pythons深浅拷贝

深是深挖一层copy

可变数据类型时,

深拷贝的时候,无论数据类型里面多深,多少数据结构,都会完完整整的复制一份

-里面的数据产生变化,对深拷贝的值没有影响 -开辟一块空间,把拷贝值放入

浅拷贝,数据产生变化,新变量的值会发生变化

浅拷贝,不可变数据类型时,只是把值赋给了新的变量,地址仍指向原来地址

深拷贝,不可变,开辟了新的内存空间,指向新的地址

原文地址:https://www.cnblogs.com/goddog1024/p/11138561.html

时间: 2024-10-13 04:21:11

python深浅拷贝的理解和区分的相关文章

python 深浅拷贝 进阶

主要理解新与旧到底在哪里 这样也就理解了 深浅拷贝 先说说赋值,其实python中的赋值其实是赋值了一个引用,例如: foo1=1.0 foo2=foo1 用操作符is判断时,你可以发现结果是true,是因为python是先创建了一个对象1.0,然后这个对象的引用又被赋值给了foo1和foo2,但是如果是这样: foo1=1.0 foo2=1.0 这时你会发现,这其实是创建了两个不同的对象,用内建函数id()可以发现,二者的身份不同: 其实python还有一个特例,例如: a=1 b=1 你会发

Python开发【第二章】:Python深浅拷贝剖析

Python深浅拷贝剖析 Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果. 下面本文就通过简单的例子介绍一下这些概念之间的差别. 一.对象赋值 创建列表变量Alex,变量包含子列表,通过变量Alex给变量lzl赋值,对

8.6(数据类型分类,python深浅拷贝,异常处理,基本的文件操作,绝对路径和相对路径)

数据类型分类 按照存值个数: 存一个值:整型/浮点型/字符串 存多个值:列表/字典/元组/集合 按照有序和无序: 有序:字符串/列表/元组 无序:字典/集合 按照可变和不可变 可变:字典/列表/集合 不可变:整型/浮点型/字符串/元组 Python深浅拷贝 # 拷贝 赋值 # lt = [1,2,3] # lt2 = lt # lt.append(4) # print(lt) # print(lt2) # 列表为可变类型,所以lt的值变化,lt2的值也会跟着变化 # 浅拷贝 # import..

Python 深浅拷贝 (Shallow copy and Deep copy in Python)

前言 昨天刷公众号看到一篇描述py优雅语法的文章,心痒之下到家就开始尝试,学习了for else statement,yield和py版三目写法.在列表切片这部分中,对作者的列表拷贝写法,有些不太理解. # 拷贝 copy_items = items[::] 或者 items[:] 尝试 首先开一个python,随便建一个列表l=[1,2,3]将其进行两种方法的拷贝: 我的写法 c=l 作者的写法 d=l[:] 分别打印了c和d,并没有什么差别,仔细斟酌了一下作者的用意,觉得应该有一些深层次的考

Python深浅拷贝

深浅拷贝 深浅拷贝分为两部分,一部分是数字和字符串另一部分是列表.元组.字典等其他数据类型. 数字和字符串 对于数字和字符串而言,赋值.浅拷贝和深拷贝无意义,因为他们的值永远都会指向同一个内存地址. # 导入copy模块>>> import copy# 定义一个变量var1>>> var1 = 123# 输出var1的内存地址>>> id(var1)1347747440>>> var2 = var1# var2的内存地址和var1相同

python深浅拷贝以及数据在内存中储存方法

要搞懂深浅拷贝,首先要明白数据在内存里的储存方法. 一个变量的储存,首先是变量名加上储存内容的ID,通过ID去找到变量名所对应的内容, 当我们对数据进行赋值时,其实是把内容的整体地址赋给别的变量名(相当于复制一层ID) 然而当使用浅copy时,相当于把整体内容的地址与内容中第一层地址给复制(相当于复制两层ID) 应用:直接在变量名后加一个.copy(),或import调用copy模块使用模块中的方法copy.copy() 深度拷贝,其实是复制的整体以及整体内的所有ID(复制所有层ID) 方法是用

python深浅拷贝,集合以及数据类型的补充

1.基础数据类型的补充 1.元组 如果元组中只有一个数据,且没有逗号,则该'元组'与里面的数据的类型相同.如: 1 tu = (1) 2 tu1 = (1,) 3 tu2 = ('alex') 4 tu3 = ([1,2,3],) 5 print(tu,type(tu)) # 1 <class 'int'> 6 print(tu1,type(tu1)) # (1,) <class 'tuple'> 7 print(tu2,type(tu2)) # alex <class 's

深浅拷贝的理解

一.理解 1.深拷贝:当拷贝完一个对象的时候,其中一个对象的数据发生了变化,另一个对象的数据也会发生变化. 因为深拷贝拷贝的是索引 2.浅拷贝:当拷贝完一个对象的时候,其中一个对象的数据发生了变化,另外一个对象的数据 不会发生变化. 因为浅拷贝拷贝的是数值 二.知识点补充: 1.合并对象: Object.assign()合并对象 参数1:需要合并的对象A 参数2:需要进行合并的对象B ..... 返回值是一个合并后的对象 2.堆 和 粘 的理解 栈:原则 先进后出 栈里面基本上全部都是放的基本数

python 深浅拷贝

先定义一个列表 >>> s = [1,'alex','alvin'] >>> s2 = s.copy() 使用copy()方法拷贝,创建一个新的对象s2 >>> print(s2) 拷贝之后s2对象和s对象的内容一样. [1,'alex','alvin'] >>> s2[0] = 3 修改s2对象的值 >>> print(s2) [3,'alex','alvin'] 打印s2,发现s2对象的值发生了变化 >&g