python字符串是如何存储在内存中的

v_ae 2018-02-28 05:29:57


我想问字符串是如何在内存中存储的,为何每次输出 "ni hao " 的值都不同
希望能讲的深入一点,谢谢各位
...全文
1266 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Justinbobor 2019-07-30
  • 打赏
  • 举报
回复
a=1,b=1 id(a)=id(b) #短的字符串,数字python在内存中是一个对象 a=[],b=[] id(a)!=id(b) #字典,数组这样的对象在内存中python会new两个不同的对象 a="new a string" b="new a string" #长的字符串python在内存中同样会new两个不同的对象 id(a)!=id(b) python中怎样判断长短就不太明白了
tillworldend 2019-03-01
  • 打赏
  • 举报
回复
这个确实有点难,不懂
三级狗 2018-11-13
  • 打赏
  • 举报
回复
接楼上的观点,这里下图抛出反例,很遗憾字符串里如果出现了空格, 事情就变得有趣起来,我也不知道是为什么,希望有大神来来解答下吧。
  • 打赏
  • 举报
回复
你问的那个为什莫每次‘ni hao’这个字符串的值为啥每次都不同,应该是在内存中本来就存有好几个‘ni hao’这个字符串,你每次访问这个字符串的id时都访问的不同的字符串,因此会出现不同的id,你可以找一个复杂一点的字符串,这样这个字符串在内存中可能不存在,你每次引用时便是引用的这一个字符串,便会有相同的id 我自己做的一个测试:
>>> a='32ewdewe32efrsjiu12'
>>> id(a)
1966138853464
>>> id('32ewdewe32efrsjiu12')
1966138853464
>>> b='32ewdewe32efrsjiu12'
>>> id(b)
1966138853464
>>> b=a
>>> id(b)
1966138853464
>>>

这个例子中每个id都想相同的
v_ae 2018-03-02
  • 打赏
  • 举报
回复
引用 1 楼 xpresslink 的回复:
你这个问题是个很难的问题
在python中给变量赋值和C语言是完全不同的,在python中变量不是容器,只是个标签。
在Python中先创建一个字符串对象,然后把引用地址(也就是id() 得到的值)绑定给一个变量名。
不同的程序块中(在IDLE,python shell中 每一行就算是一个单独程序块)即使相同字符串也是单独创建对象。
在相同程序块中 相同字符串对象会有缓存机制就是引用同一个字符串对象地址绑给不同变量。


请看下图:


请教一下,为何空格去掉了,再给line_1赋值,其身份标识就不会改变了;而带有空格符的line_1身份标识上线却是不同的。这是为什么呢~
oyljerry 2018-02-28
  • 打赏
  • 举报
回复
line1是一个引用。他指向真正的数据。id就是引用的地址值。所以指向不同的数据引用就会发生变化
混沌鳄鱼 2018-02-28
  • 打赏
  • 举报
回复
你这个问题是个很难的问题 在python中给变量赋值和C语言是完全不同的,在python中变量不是容器,只是个标签。 在Python中先创建一个字符串对象,然后把引用地址(也就是id() 得到的值)绑定给一个变量名。 不同的程序块中(在IDLE,python shell中 每一行就算是一个单独程序块)即使相同字符串也是单独创建对象。 在相同程序块中 相同字符串对象会有缓存机制就是引用同一个字符串对象地址绑给不同变量。

37,719

社区成员

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

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