python相同中文字符串id不同_字符串相同ID竟然不同

😎今日随笔:字符串驻留😎

一、场景复现

我们先来看以下代码,

以上代码的运行很正常。。。没有什么异常的😃😃😃

那好,接下来我们再看以下代码,

相信大家看👀完之后一定会很困扰吧🥺🥺🥺,这两个图片中唯一的区别就是多了个特殊字符“!”,结果却截然不同。

其实这就涉及到了Python的“字符串驻留”,英文名为:string intern。

二、什么是字符串驻留呢🤔🤔🤔

在 Python中,万物皆对象。当我们为一个变量a赋值的时候,此时a指向值“python”的内存地址,

那么当我们再次为变量b赋值的时候,Python解释器会先在驻留内存中查找是否已经存在这个“python”对象,

如果已经存在就不再创造新的对象,两个变量a和b共享同一个对象,诺,如下图所示:

这就是驻留字符串的概念,因为变量a和变量b都指向同一个对象,也就是同一个内存地址,因此,a is b 的结果就是True。

那么对于这种短字符串,在内存中可能大量存在,这样做的好处就是可以节约内存,但是这并不意味着所有的字符串都是这样的。

针对于短字符串,当我们将其赋值给多个对象时,在内存中只有一个副本,多个对象共享该副本。

三、字符串的注意事项

1、字符串的驻留条件

🤔仅包含字母、数字、下划线的字符串,python会启用驻留机制,

因为Python解释器仅对看起来像python标识符的字符串使用intern()方法,而python标识符正是由字母、数字和下划线组成。🤔

2、字符串的连接

🤔字符串数据类型,是不可变类型,我们都知道,如果我们有了一个字符串,想要修改它,是不可以的,则必须新建一个对象,

因此不推荐使用“+”连接字符串,而推荐大家采用join()方法🤔

3、整数驻留

🤔python会针对整数范围是[-5, 256]的整数启用驻留机制🤔

四、驻留机制的应用场景

🥺这种驻留机制好像在实际应用中并没有什么用,为什么我们还是要了解呢,因为,至少我们可以在面试的时候露一手呀😂😂

五、测试条件

🥺使用Python交互式又或者使用ipython测试,结果均相同,但是使用PyCharm,结果却不同,

因为PyCharm为我们又做了进一步的优化,这也就是为什么PyCharm运行的时候会占用大量的内存空间的原因。🥺

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值