代码之家  ›  专栏  ›  技术社区  ›  jottos

为什么使用“==”或“is”比较字符串有时会产生不同的结果?

  •  987
  • jottos  · 技术社区  · 15 年前

    我有一个python程序,其中两个变量被设置为 'public' . 在条件表达式中,我比较了 var1 is var2 但如果我把它改成 var1 == var2 它返回 True .

    现在,如果我打开我的python解释器并进行相同的“is”比较,它就会成功。

    >>> s1 = 'public'
    >>> s2 = 'public'
    >>> s2 is s1
    True
    

    我这里缺什么?

    15 回复  |  直到 5 年前
        1
  •  1348
  •   SilentGhost    15 年前

    is ==

    >>> a = 'pub'
    >>> b = ''.join(['p', 'u', 'b'])
    >>> a == b
    True
    >>> a is b
    False
    

    id(a) == id(b)

        2
  •  489
  •   Daniel Pryden    7 年前
        3
  •  97
  •   Thomas Owens    15 年前

    is ==

        4
  •  51
  •   Jason Baker    15 年前

    >>> a = intern('a')
    >>> a2 = intern('a')
    >>> a is a2
    True
    

    is

    sys

        5
  •  34
  •   Morgan Thrapp    8 年前

    is ==

    person

    class Person(object):
       def __init__(self, name, age):
           self.name = name
           self.age = age
    
       def __eq__(self, other):
           return self.name == other.name and self.age == other.age
    
    jack1 = Person('Jack', 23)
    jack2 = Person('Jack', 23)
    
    jack1 == jack2 #True
    jack1 is jack2 #False
    

        6
  •  32
  •   SilentGhost    15 年前
        7
  •  25
  •   Mattias Nilsson    15 年前

    >>> a = 1
    >>> b = 1
    >>> b is a
    True
    >>> a = 6000
    >>> b = 6000
    >>> b is a
    False
    

        8
  •  16
  •   Jack M.    15 年前

    is ==

    >>> s1 = u'public'
    >>> s2 = 'public'
    >>> s1 is s2
    False
    >>> s1 == s2
    True
    

    s1 s2

        9
  •  15
  •   meder omuraliev    15 年前

    == is

    >>> s = 'one'
    >>> s2 = 'two'
    >>> s is s2
    False
    >>> s2 = s2.replace('two', 'one')
    >>> s2
    'one'
    >>> s2 is s
    False
    >>> 
    

    s

        10
  •  11
  •   Zan Lynx    15 年前

        11
  •  9
  •   Ram    10 年前

        12
  •  5
  •   X. Wang    7 年前

    == is

    >>> a = 'banana'
    >>> b = 'banana'
    >>> a is b 
    True
    

    a b

    >>> a = 'a longer banana'
    >>> b = 'a longer banana'
    >>> a == b, a is b
    (True, False)
    

    >>> a = [1, 2, 3]
    >>> b = [1, 2, 3]
    >>> a is b
    False
    

    b = a

    >>> a = [1, 2, 3]
    >>> b = a
    >>> b is a
    True
    
        13
  •  1
  •   Christian König    7 年前

    is == Python Documentation

    a is b a == b

    >>> nan = float('nan')
    >>> nan is nan
    True
    >>> nan == nan
    False
    

        14
  •  0
  •   johnashu    7 年前

    is

    ==

        15
  •  -3
  •   Andre_k    6 年前

    s1='public'
    s2='public'
    sorted(s1) == sorted(s2)
    

    TRUE

    s1='public'
    s2='publci'
    sorted(s1) == sorted(s2)
    

    s1='public'
    s2='publca'
    sorted(s1) == sorted(s2)
    

    FALSE