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对象的值发生了变化

>>> print(s)

[1,‘alex‘,‘alvin‘]    而对应的s对象的值却没有发生任何变化

总结:简单的copy拷贝,新创建的对象和被拷贝的对象之间没有关系,两者修改任意一个对象的值,都不会对对方产生影响。

>>> s = [[1,2],‘alex‘,‘alvin‘]

>>> s3 = s.copy()    做拷贝

>>> print(s)      

[[1,2],‘alex‘,‘alvin‘]

>>> print(s3)

[[1,2],‘alex‘,‘alvin‘]    在这一步之前s和s2输出的值都是一样的。

>>> s3[1] = ‘linux‘    修改s2对象的值,这里一步s2发生变化,s不会发生变化,两者没有影响。

>>> print(s3)

[[1,2],‘linux‘,‘alvin‘]

>>> print(s)

[[1,2],‘alex‘,‘alvin‘]

>>> s3[0][1] = 3  这里修改了s2列表里面的子列表的值,打印s和s2发现两个对象的子列表的值都发生了变化。

>>> print(s3)

[[1,3],‘linux‘,‘alvin‘]

>>> print(s)

[[1,3],‘linux‘,‘alvin‘]

时间: 2024-11-06 23:27:27

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深浅拷贝

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

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深浅拷贝以及数据在内存中储存方法

要搞懂深浅拷贝,首先要明白数据在内存里的储存方法. 一个变量的储存,首先是变量名加上储存内容的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

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(

Python——深浅拷贝

1.赋值操作两者是同一数据,其内存地址一样 2.copy是浅拷贝,只能拷贝嵌套数据的第一层数据,嵌套的数据与赋值操作相同,其内存地址一样,当一个被更改,其他的拷贝也会跟着变. 3.deepcopy是深拷贝,使用深拷贝需要引入copy库,深拷贝是将元素内部的所有元素完全进行拷贝赋值,即使是嵌套数据,其嵌套的数据也是可以复制的,所以原数据改变,拷贝的数据不会跟着变. 原文地址:https://www.cnblogs.com/heshike/p/9432239.html