本帖最后由 阿奇_o 于 2021-12-22 00:22 编辑
Every object has an identity, a type and a value .
(每个对象 都有一个 唯一id,类型,值)
An object's identity never changes once it has been created;
(一个对象的id 一旦被创建,就不会改变 )
you may think of it as the object's address in memory.
(你可以认为 对象的identity 就是对象的内存地址。)
The ‘is’ operator compares the identity of two objects;
( is 操作符 对比两个对象id是否为同一个。注:identity 本身有 "同一性"的意思)
the id() function returns an integer representing its identity.
( id()函数返回的是 代表该对象identity 的一串整数)
可以 先读两三遍,这个官方的"Python语言参考"说明。
然后呢,先稍微区分一下 这四个概念:名 name,唯一标识符 id,类型 type, 值 value
好,下面 请你自己:针对 不同的数据类型(整数int,字符串str,列表list ...,包括None)、
函数,自定义类与类的实例,等等任何你能想到的,进行 如下类似的操作,最后你就会发现规律对于 列表、字典 或集合 等这些"可变的"数据类型,
不管是否包含元素,创建时都会"绑定"(指向)到不同的对象上(内存)。
>>> obj = [1, 2, 3]
>>> id(obj)
2111689797064
>>> obj = [1, 2, 3]
>>> id(obj)
2111689721736
>>> obj1, obj2 = [], []
>>> print(id(obj1), id(obj2))
2111682878984 2111689723144
>>> obj1, obj2 = [], []
>>> obj1 is obj2
False
>>> d1, d2 = dict(), dict()
>>> d1 is d2
False
>>> s1, s2 = set(), set()
>>> s1 is s2
False
>>>
对于 元组对象 这种"不可变的"数据类型,
……
对于 "类" 与 "类的实例",也是属于"引用类型的对象",
>>> id(str) # 内置的str类,"类"也是对象
140735893776816
>>> class Dog:
pass
>>> id(Dog)
2111685351992
>>> d = Dog()
>>> id(d)
2111689490184
>>> d = Dog()
>>> id(d)
2111689556680
>>> d1, d2 = Dog(), Dog()
>>> d1 is d2
False
……
对于 None 呢? —— None,也是一个对象。
>>> id(None)
140736127272976
>>> id(None)
140736127272976
大概就这样,你自个慢慢试,慢慢玩吧。
ps:不要太在意 "名字",很多时候都是"不同的叫法"而已,或"翻译的锅",或甚至"一时口误",
它们只是形式符号上的不同 而已,其指代的 "实体"(本质·对象)可能是同一个东西。
ps2: Python有哪些对象?(嗯,大的13种,小的13+11种 见"Python语言参考")
|