python列表的深浅拷贝

在python中的数据类型包括:bool、int、float、str、set、list、tuple、dict等等。
简单数据类型:bool、int、float、str、
复杂数据类型:list、tuple、set、dict、
简单的数据类型变量在内存中保存的格式如下:

str1 = 'hello world'
print(id (str1))
#表示把字符串数据放到一个内存中,变量str1是数据的引用
#相当于是字符串数据的一个标签
str1 = 'lalal'
#表示给变量str1重新进行赋值,即是给‘lalal’
#数据重新开辟一个内存地址,
#变量str1的引用地址也会改变

在这里插入图片描述
对于复杂数据类型变量在内存中保存的形式如下: 列表中保存的是数据的内存地址而不是数据本身。
在这里插入图片描述

浅拷贝:对于浅拷贝来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来数层数来说,保持一致性

# 将lst中保存的内存地址中的数据复制出一份来,
'''
列表中的数据包含两层意思,第一层是:
引用地址
第二层是,内存中的数据

'''
lst = [1,2,3]
lst2 = lst.copy()
print(id(lst))
print(id(lst2))
print(id(lst[0]))
print(id(lst2[0]))

在这里插入图片描述

深拷贝

深拷贝
深拷贝完全复制对象的元素,不是复制内存地址,
是开辟新的内存空间将被复制对象的值放在了新的内存空间中
并将新的内存地址指向新的变量,这样的话修改原对象不会对新的对象产生影响。
深拷贝是在另一块地址中创建一个新的变量,同时容器内的元素的地址也是新开辟的,
仅仅是值相同而已,是完全的副本。

import copy
a={1:[1,2,3]}
b =a.copy().copy()
a['name']='zsj'
print(a)

c=copy.deepcopy(a)
a[1].append(4)
print(a)
print(c) # 因为拷贝过来的只是内容,而地址不一样,所以给a添加的元素添加
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值