字符串变量关于id()函数返回值都一样的问题

从删库到高薪跳槽 2019-02-12 05:34:49
请问下这个id()函数不是说返回唯一标识吗?为什么这三个id都是一样的?这个id()到底是什么作用?小白求解


代码如下:
aa1 = '1一'
aa2 = '2二'
aa3 = '3三'
a1 = aa1[1]
a2 = aa2[1]
a3 = aa3[1]
print(aa1[0], aa2[0], aa3[0])
print(aa1[1], aa2[1], aa3[1])
print(id(a1), id(a2), id(a3))
print('====================================')
print(id(aa1[0]), id(aa2[0]), id(aa3[0]))
print(id(aa1[1]), id(aa2[1]), id(aa3[1]))
print('====================================')

...全文
309 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
手无护鸡之力 2019-02-19
  • 打赏
  • 举报
回复
“共享字符串字面量是一种优化措施,称为驻留(interning)。CPython 还 会在小的整数上使用这个优化措施,防止重复创建“热门”数字,如 0、-1 和 42。注意,CPython 不会驻留所有字符串和整数,驻留的条件是实现细节,而且没有文档说明。”

这个是CPython解释器的优化功能,不是Python的特性,其它解释器上可能不同。不必关注,编程时不要依赖这种特性就好。
  • 打赏
  • 举报
回复
谁能给一个让我大彻大悟的答案,给跪了~算了,不纠结了,贴结给四楼了,那个地址有些收获
  • 打赏
  • 举报
回复

蒙圈了。。
手无护鸡之力 2019-02-13
  • 打赏
  • 举报
回复
看这个
https://github.com/satwikkansal/wtfpython
Dustin2019 2019-02-12
  • 打赏
  • 举报
回复
我觉得这个链接的说明对你一定有帮助。 https://blog.csdn.net/tycoon1988/article/details/38850443
陈年椰子 2019-02-12
  • 打赏
  • 举报
回复
id(object)函数是返回对象object在其生命周期内位于内存中的地址,id函数的参数类型是一个对象。

我觉得
id(aa1), id(aa2), id(aa3)
有意义,因为aa1,aa2,aa3 是对象。

id(aa1[0]), id(aa2[0]), id(aa3[0])
和id(aa1[1]), id(aa2[1]), id(aa3[1]) 没啥意义,应该是要用的时候,才取值。
手无护鸡之力 2019-02-12
  • 打赏
  • 举报
回复
应该是相同字符/整数(256以下),在内存中只有一份拷贝吧。acsii字符也是256内整数


a = 'h'
b = 'h'
print(id(a), id(b)) # 32762024 32762024

# 再看
a = 'hello'
b = 'world'

# 字符 o 在内存中只有一份
print(id(a[4]), id(b[1])) # 32760752 32760752



而你的问题,由于你存的是UTF-8字符(占3-4个字节),猜测开头的字节是一样的,所以共用同一个,也就是同地址

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧