永发信息网

Python中定义:具有相同内容的字符串是同一个对象 s1 = "Welcome to Python" s2 = "Welcome to Python"

答案:2  悬赏:10  手机版
解决时间 2021-04-04 02:02
Python中定义:具有相同内容的字符串是同一个对象 s1 = "Welcome to Python" s2 = "Welcome to Python"
最佳答案
首先查阅资料推测了一下id()函数的原理,这里顺便引入一个is的概念来方便你理解,看下面这个表达式来说明以下三者之间的关系:
(ob1 is ob2) 等价于 (id(ob1) == id(ob2))
1. id():获取的是对象在内存中的地址


2. is :比对2个变量的对象引用(对象在内存中的地址,即id() 获得的值)是否相同。如果相同则返回True,否则返回False。换句话说,就是比对2个变量的对象引用是否指向同一个对象。


3. ==:比对2个变量指向的对象的内容是否相同。
ob1 == ob2 不代表一定会 id(ob1) == id(ob2),因为id()函数不仅要求内容相同,而且要求指向同一个对象。
就是说你问的问题其实是有问题的。。
或者说你的问法:“既然是同一个对象,那为什么id会不同?”有问题,因为“他们不是同一个对象”
但这不代表你的问题因为问法不太准确就没有讨论的价值了,他的价值在于:“为什么s1与s2不是同一个对象?”
这里做另一个小测试方便理解:
>>> a = 2.5
>>> b = 2.5
>>> c = b
>>> a is c
False
>>> a = 2
>>> b = 2
>>> c = b
>>> a is c
True发现问题没?其实这是在python中的一个优化:即当很短的a,b赋值很短的字符串的时候,它们的id值相同,而很长的则不会。这说明本来字符串用这种赋值方式是应该分配不同的地址的,只不过python解释器在对值很小的int和很短的字符串的时候做了一点小优化,只分配了一个对象,让它们id一样了。这才是问题关键所在。


接着读资料顺便发现了一个a is b 但是 id(a) !=id(b) 的例子,当然看完后发现和这个问题没关系这里不限细说明。。


希望我的回答可以帮到你:-)

全部回答
python内建函数总结 1. abs(x) abs()函数返回数字(可为普通型、长整型或浮点型)的绝对值。如果给出复数,返回值就是该复数的模。例如: >>>print abs(-2,4) 2.4 >>>print abs(4+2j) 4.472135955 2. apply(function,args[,keywords]) apply()函....
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
宁缺毋滥的英文怎么说
五四运动是一次彻底的,不妥协的反帝反封建运
又细又长尖嘴的叫什么鱼
谁帮我介绍一下九江二亩地
猴字的甲骨文
单选题在制作临时装片时,染色对细胞产生的影
宋庆龄说过的经典语录,一句宋庆龄的名言
中国信合(南武信用社)地址在什么地方,我要处
一个女孩会随便对一个男生.叫亲吗...
法医秦明大结局是什么 池子和秦明有什么恩
英语翻译bestbefore
长沙7月份哪里有文职类的招聘会?
wow怎么开设私人服务器?
芥菜饼的做法,芥菜饼怎么做好吃,芥菜饼的家
弓是是什么结构,亭什么楼什么是什么成语
推荐资讯
描写剑门关的作文600自,不要废话,要精辟,
华为手机里,OTG是什么意思
7.5升的洗衣机用多大的外罩
怎样做芋头糍最好吃
安卓手机如何卸载微信,我要卸载手机微信怎么
从广州去香港怎么去,从广州怎么去香港?
单选题Itis______toimaginehisaunt___
杜甫古诗词,杜甫有什么古诗
喜欢的女孩子一边拒绝自己一边又单独和我出去
部落魔兽拍卖行在哪,魔兽世界达拉然的拍卖行
----Wow, isn’t this handsome device the m
有一个关于焓湿图的例题,在利用焓湿图求实际
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?