小数据池,深浅copy

本文深入探讨Python中的内存管理机制,包括小数据池概念、整型和字符串的内存地址特性,以及列表赋值、浅拷贝和深拷贝的区别与应用。通过实例演示不同操作下对象内存地址的变化,帮助读者理解Python的数据存储和引用机制。

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

#id == is
# a = 'alex'
# b = 'alex'
# print(a == b) # 数值
# print(a is b) # 内存地址
# print(id(a))
# print(id(b))
#python中 有小数据池的概念。
# int -5 ~256 的相同的数全都指向一个内存地址,节省空间。
# str:s = 'a' * 20 以内都是同一个内存地址
#只要字符串含有非字母元素,那就不是一个内存地址
#深浅copy
#赋值运算,它们共用一个列表
# a = [1,2,3]
# b = a
# a.append(666)
# print(a,b)
# print(a is b)

#浅copy
# 第一层
# l1 = [1,2,3]
# l2 = l1.copy()
# l1.append(666)
# print(l1,l2)
# print(id(l1),id(l2))
#浅copy第二层
# l1 = [1,2,3,[22,33]]
# l2 = l1.copy()
# l1[-1].append(666)
# print(l1,l2)
# print(id(l1[-1]),id(l2[-1]))

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

#深copy 对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。
import copy
l1 = [1,2,3,[22,33]]
l2 = copy.deepcopy(l1)
l1[-1].append(666)
print(l1,l2)
print(id(l1[-1]),id(l2[-1]))

转载于:https://www.cnblogs.com/lixiaoxuan/articles/8822089.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值