代码之家  ›  专栏  ›  技术社区  ›  Intrastellar Explorer

在Python中击败字符串实习的最简单方法[复制]

  •  0
  • Intrastellar Explorer  · 技术社区  · 5 年前

    我有一个案例,我想打败弦乐实习生。

    假设我拥有的字符串是 "foo bar" .

    我知道一些破解字符串内部化的方法。所有这些方法都涉及在运行时计算表达式。

    In [1]: my_str = "foo bar"
    In [2]: my_new_str1 = " ".join(["foo", "bar"])
    In [3]: my_new_str2 = "foo bar "[:-1]
    In [4]: my_new_str3 = "foo " + "bar"
    
    In [5]: id(my_str)
    Out[5]: 4483028144
    
    In [6]: id(my_new_str1)
    Out[6]: 4483030192
    
    In [7]: id(my_new_str2)
    Out[7]: 4484125872
    
    In [8]: id(my_new_str3)
    Out[8]: 4484052336
    

    有一个内置功能 sys.intern ,这是一个字符串。我想做完全相反的事情, 以简单/描述性的方式实习。

    有什么东西可以以“干净”的方式击败弦乐实习吗?

    2 回复  |  直到 5 年前
        1
  •  3
  •   dawg    5 年前

    我想在join周围放一个函数:

    def new_str(s):
        return ''.join(s)
    
    >>> s='a string'
    
    >>> s1=new_str(s)
    
    >>> id(s)
    4568404208
    
    >>> id(s1)
    4569455664
    
    >>> s is s1
    False
    

    但我认为这很愚蠢。。。

        2
  •  2
  •   Silvio Mayolo    5 年前

    你也可以子类化 str .

    >>> class UninternedStr(str):
    ...   pass
    ... 
    >>> s = UninternedStr('a string')
    >>> s1 = UninternedStr('a string')
    >>> s is s1
    False