该
is运营商不匹配变量的值,但这些实例本身.
它到底意味着什么?
我声明了两个变量命名x并y在两个变量中分配相同的值,但是当我使用is运算符时它返回false .
我需要澄清一下.这是我的代码.
x = [1, 2, 3]
y = [1, 2, 3]
print x is y #It prints false!
Run Code Online (Sandbox Code Playgroud) 运算符是比较两个对象的内存地址(如果它们相同),则返回true,否则返回false. 代码#1
>>> a = "poi"
>>> b = "poi"
>>> a is b
True
Run Code Online (Sandbox Code Playgroud)
我创建了两个对象,其内容相同,但它们完全位于不同的内存地址上.那么为什么运算符返回true?不应该返回虚假.就像这段代码一样
>>> ktr = "today is a fine day"
>>> ptr = "today is a fine day"
>>> ktr is ptr
False
Run Code Online (Sandbox Code Playgroud) 在浏览文档时,特别是http://docs.python.org/2/reference/expressions.html#is,我仍然找不到定义Python关键字实现的dunder/protocol方法is.什么方法决定它?根据我的理解,所有is操作都是id在调用两个对象时比较函数的结果.
我正在尝试构建一组对象的实例,但是添加某些对象的实例会导致一个TypeError: unhashable instance.这是一个最小的例子:
from sets import Set
import random
from UserDict import DictMixin
class Item1(object):
pass
class Item2(DictMixin):
pass
item_collection = Set()
x = Item1()
y = Item2()
item_collection.add(x) # this works
print item_collection
item_collection.add(y) # this does not
print item_collection
Run Code Online (Sandbox Code Playgroud)
为什么会失败?如何获取从DictMixin派生的对象的一组实例?