发布网友 发布时间:2024-05-09 18:19
共2个回答
热心网友 时间:2024-06-02 04:03
首先查阅资料推测了一下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发现问题没?其实这是在python中的一个优化:即当很短的a,b赋值很短的字符串的时候,它们的id值相同,而很长的则不会。这说明本来字符串用这种赋值方式是应该分配不同的地址的,只不过python解释器在对值很小的int和很短的字符串的时候做了一点小优化,只分配了一个对象,让它们id一样了。这才是问题关键所在。
接着读资料顺便发现了一个a is b 但是 id(a) !=id(b) 的例子,当然看完后发现和这个问题没关系这里不限细说明。。
希望我的回答可以帮到你:-)
热心网友 时间:2024-06-02 04:05
python内建函数总结 1. abs(x) abs()函数返回数字(可为普通型、长整型或浮点型)的绝对值。如果给出复数,返回值就是该复数的模。例如: >>>print abs(-2,4) 2.4 >>>print abs(4+2j) 4.472135955 2. apply(function,args[,keywords]) apply()函....