Python ID 问题
Python id issues
我正在玩以下代码,发现字符串变量具有相同的 ID。
谁能告诉我为什么只有字符串的行为与其他两个 int 和列表类型不同?
再总结一下问题,number1和number2的id不同。
list1 和 list2 也有不同的 id。但是,string1、string2 甚至 string3 与其他字符串变量具有相同的 ID...!
number1 = 123456
number2 = 123456
number3 = number1
print(id(number1))
print(id(number2))
print(id(number3))
list1 = [1, 2, 3]
list2 = [1, 2, 3]
list3 = list1
print(id(list1))
print(id(list2))
print(id(list3))
string1 = 'hello'
string2 = 'hello'
string3 = string1
print(id(string1))
print(id(string2))
print(id(string3))
您已经观察到一些内部实现细节(语言不保证的优化):
-5 <= x <= 256
范围内的整数在启动时预先计算并重复使用。
直接在您的程序中键入的字符串 string1 = 'hello'
被保留并重复使用。
还有一些保证行为:
诸如string3 = string1
之类的分配从不复制。
永远不会重复使用新的可变对象:[1, 2, 3]
。它们必须是不同的,这样它们才能随着时间的推移发生不同的变异。
像None
这样的单例只被实例化一次并且可以使用对象标识可靠地进行比较:result is None
.
希望这能让您对该语言及其实现有所了解。
我正在玩以下代码,发现字符串变量具有相同的 ID。 谁能告诉我为什么只有字符串的行为与其他两个 int 和列表类型不同?
再总结一下问题,number1和number2的id不同。 list1 和 list2 也有不同的 id。但是,string1、string2 甚至 string3 与其他字符串变量具有相同的 ID...!
number1 = 123456
number2 = 123456
number3 = number1
print(id(number1))
print(id(number2))
print(id(number3))
list1 = [1, 2, 3]
list2 = [1, 2, 3]
list3 = list1
print(id(list1))
print(id(list2))
print(id(list3))
string1 = 'hello'
string2 = 'hello'
string3 = string1
print(id(string1))
print(id(string2))
print(id(string3))
您已经观察到一些内部实现细节(语言不保证的优化):
-5 <= x <= 256
范围内的整数在启动时预先计算并重复使用。直接在您的程序中键入的字符串
string1 = 'hello'
被保留并重复使用。
还有一些保证行为:
诸如
string3 = string1
之类的分配从不复制。永远不会重复使用新的可变对象:
[1, 2, 3]
。它们必须是不同的,这样它们才能随着时间的推移发生不同的变异。像
None
这样的单例只被实例化一次并且可以使用对象标识可靠地进行比较:result is None
.
希望这能让您对该语言及其实现有所了解。