python 深浅复制与指针内存

本文探讨了Python中的深浅复制以及指针与内存的关系。通过实例解释了基本类型与可变类型的赋值区别,以及copy()和deepcopy()函数在复制对象时的不同。文章指出,深复制创建完全独立的对象副本,而浅复制仅复制对象引用,当修改可变对象时,会影响原始对象。

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

Python是一门很好的语言,他的优点在于拥有巨大灵活性的同时也拥有无比的严谨性,其他语言规定了很多语法,告诉你什么情况下,语法就是这样的,而Python却用很少的规定,延伸出很多语法,有些语法看上去很奇怪,仔细分析却是那么的合理。今天思考了Python中关于指针和深浅复制的问题,下面希望能通过根据内存空间的变化对这些让人头疼的问题作出一个解释。

首先看第一个例子:

a = 1

b = a

b = 2

print ’a = %s‘ %a, ‘b = %s’%b

结果:a = 1 b = 2


当执行a = 1操作时,内存中先分配一个整型变量的空间并赋值为1,然后将a指向这块空间,执行b = a时,将b也指向这块内存,这时,a和b的地位是一样的。b = 2,按说会把当前b指向的那块内存赋值为2,其实Python并不会这样做。因为在Python中,整型以及其他基本类型加上字符串和元组等是不可以被修改的。意思是他们一旦被声明,在内存上就不能被改变。那么执行b = 2时发生的是,系统分配一个整型的内存,并赋值为,再将这块内存的地址赋给b,因此a和b就指向了不同的值。

在看一个很矛盾的例子:

a=[1,[2],3]

b=a

b[0]=0

print a

结果:[0,[2],3]

这好像不太对,和上面说的有点矛盾,其实并不矛盾。因为列表是可以修改的,a和b指向的是一个列表,其实列表时存的是一组指针。指针是可以修改的。元组不能修改就是因为元组里的数据是内存上的数据本身,而列表里元素是指针。当使用b修改b[0]时,实际上是将原本指向一个1的指针b

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值