Python基础

文章详细阐述了深拷贝和浅拷贝的概念,深拷贝创建了对象的新副本,不共享内存,而浅拷贝仅复制首地址,导致修改副本可能影响原数据。在Python中,`b=a`是浅拷贝,`c=a[:]`和`d=a.copy()`是浅拷贝,`e=copy.deepcopy(a)`是深拷贝。而在Java中,基本数据类型直接存储在栈中,引用数据类型存储其在堆中的引用,指向实际数据的地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、基本概念

1、深拷贝和浅拷贝

1)深拷贝和浅拷贝概念

1.深拷贝,拷贝的程度深,自己新开辟了一块内存,将被拷贝内容全部拷贝过来了;
2.浅拷贝,拷贝的程度浅,只拷贝原数据的首地址,然后通过原数据的首地址,去获取内容。
两者的优缺点对比:
(1)深拷贝拷贝程度高,将原数据复制到新的内存空间中。改变拷贝后的内容不影响原数据内容。但是深拷贝耗时长,且占用内存空间。
(2)浅拷贝拷贝程度低,只复制原数据的首地址。其实是将副本的地址指向原数据地址。修改副本内容,是通过当前地址指向原数据地址,去修改。所以修改副本内容会影响到原数据内容。但是浅拷贝耗时短,占用内存空间少。

 (3)相比于浅拷贝,b= a这种直接指向a的首地址,a和b完全一样。

import copy 
a = [1,2,3,[4,5]]
b = a
c = a[:]
d = a.copy() 
e = copy.deepcopy(a)

 

结合上面两图,得出结论:

1)b=a为直接指向a的地址,a和b完全一样

2)c = a[:]等同于浅copy,只指向a的首地址,copy出来的是a的首地址,后面的地址指向一样,这样看首地址的元素互不影响,非首地址的元素公用存储空间,会收到影响

3)d为深copy,完全复制元素和指针,开辟自己的新的内存空间,a与d之间的任何操作互不影响

可视化python在线编程平台:

Python Tutor code visualizer: Visualize code in Python, JavaScript, C, C++, and Java


2)对比JAVA:

在Java中基本数据类型数据直接存储在栈(stack)中,引用数据类型数据存储的是该对象在栈中引用,真实的数据存放在堆内存里,引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值