python中具有相同值的两个不同字符串对象
让我有一个字符串对象a=ABC。现在我想创建一个不同的对象b=ABC,将ida和idb分开。在python中可能吗?是字符串id的重要来源:python中具有相同值的两个不同字符串对象,python,string,object,Python,String,Object,让我有一个字符串对象a=ABC。现在我想创建一个不同的对象b=ABC,将ida和idb分开。在python中可能吗?是字符串id的重要来源: >>> a = 'python' >>> id(a) 4400931648 >>> b = a.encode().decode() >>> b 'python' >>> id(b) 4400931984 >>> print('Eureka!') Eu
>>> a = 'python'
>>> id(a)
4400931648
>>> b = a.encode().decode()
>>> b
'python'
>>> id(b)
4400931984
>>> print('Eureka!')
Eureka!
或:
但总的结论是,即使有可能,也不应该使用它。是字符串id的重要来源:
>>> a = 'python'
>>> id(a)
4400931648
>>> b = a.encode().decode()
>>> b
'python'
>>> id(b)
4400931984
>>> print('Eureka!')
Eureka!
或:
但总的结论是,即使可能,也不应该使用它。这是一个实现细节。如果两个变量引用同一个对象a为真b为真,则它们必须相等a==b为真。但至少对于不可变对象,Python没有指定它的功能 标准CPython实现对小整数使用公共ID:
a = 1
b = 1
a is b # True
其基本原理是,它们可能在同一程序中的多个位置使用,共享一个公共变量可以节省一些内存
当解释器可以很容易地猜测它们将共享相同的值时,字符串也是如此。Python3.6上的示例
a = "abc"
b = 'ab' + 'c'
c = ''.join((chr(i) for i in range(65, 68)))
a is b # gives True
a is c # gives False
TL/DR:两个相等的字符串是否共享相同的id是一个实现细节,不应依赖于此。这是一个实现细节。如果两个变量引用同一个对象a为真b为真,则它们必须相等a==b为真。但至少对于不可变对象,Python没有指定它的功能 标准CPython实现对小整数使用公共ID:
a = 1
b = 1
a is b # True
其基本原理是,它们可能在同一程序中的多个位置使用,共享一个公共变量可以节省一些内存
当解释器可以很容易地猜测它们将共享相同的值时,字符串也是如此。Python3.6上的示例
a = "abc"
b = 'ab' + 'c'
c = ''.join((chr(i) for i in range(65, 68)))
a is b # gives True
a is c # gives False
TL/DR:两个相等的字符串是否共享相同的id是一个实现细节,不应依赖于此。Python id返回作为该对象标识的整数 简言之,回答问题: 尝试通过切片创建字符串ABC
>>> a = "ABC"
>>> id(a)
4427474416
>>> b = "ABC"
>>> id(b)
4427474416
>>> b = a[:2]+a[2:]
>>> b
'ABC'
>>> id(b)
4429072688
请详细解释
Python 3.7
实际上,在python不可变对象中,字符串、整数、元组存储在缓存中,当我们调用id函数时,它会返回它们的位置
因此,对于不可变对象,它返回的id与在python中缓存它们的大部分时间相同,如上所述
对于相同的可变对象,id返回不同的值
考虑这个例子:
>>> d = { 'a' : 1 }
>>> id(d)
4426697136
>>> p = { 'a' : 1 }
>>> id(p)
4427492000
注:
它可能不会为相同的不可变对象返回相同的标识值,因为它们可能/可能不会被缓存。Python id返回充当该对象标识的整数 简言之,回答问题: 尝试通过切片创建字符串ABC
>>> a = "ABC"
>>> id(a)
4427474416
>>> b = "ABC"
>>> id(b)
4427474416
>>> b = a[:2]+a[2:]
>>> b
'ABC'
>>> id(b)
4429072688
请详细解释
Python 3.7
实际上,在python不可变对象中,字符串、整数、元组存储在缓存中,当我们调用id函数时,它会返回它们的位置
因此,对于不可变对象,它返回的id与在python中缓存它们的大部分时间相同,如上所述
对于相同的可变对象,id返回不同的值
考虑这个例子:
>>> d = { 'a' : 1 }
>>> id(d)
4426697136
>>> p = { 'a' : 1 }
>>> id(p)
4427492000
注:
它可能不会为相同的不可变对象返回相同的标识值,因为它们可能/可能不会被缓存。您不应该有任何理由弄乱这一点。为什么要担心这两个字符串对象的标识呢?如果确实需要的话,b=a[0]+a[1:]。不知道它有什么用途。是的,虽然这是可能的,但不可变对象的id无论如何都不应该是您关心的问题。我想知道你想用这个做什么。我看到了你的Y,你的X是什么?@khelwood引出了同样的问题ID@Adelin当我尝试的时候,你不应该有任何理由去搞砸这件事。为什么要担心这两个字符串对象的标识呢?如果确实需要的话,b=a[0]+a[1:]。不知道它有什么用途。是的,虽然这是可能的,但不可变对象的id无论如何都不应该是您关心的问题。我想知道你想用这个做什么。我看到了你的Y,你的X是什么?@khelwood引出了同样的问题ID@Adelin当我尝试的时候就不是了。