python自定义类与任何其他内置对象(如list)有何不同?
我不确定我的问题标题是否正确,但: 我的问题是: 当我创建了一个名为classA的新类,并对另一个名为classB的名称进行了deepcopy和平等和身份测试时: 这是我的第一个片段:使用python自定义类与任何其他内置对象(如list)有何不同?,python,class,python-2.7,Python,Class,Python 2.7,我不确定我的问题标题是否正确,但: 我的问题是: 当我创建了一个名为classA的新类,并对另一个名为classB的名称进行了deepcopy和平等和身份测试时: 这是我的第一个片段:使用type >>> import copy >>> classA = type('X', (object,), {}) >>> classB = copy.deepcopy(classA) >>> classB is classA True
type
>>> import copy
>>> classA = type('X', (object,), {})
>>> classB = copy.deepcopy(classA)
>>> classB is classA
True
>>> classB == classA
True
>>>
第二段:使用关键字“class”创建类的测试:
>>> class X(object): pass
...
>>> import copy
>>> Y = copy.deepcopy(X)
>>> Y is X
True
>>> Y == X
True
>>>
第三段:当我对列表对象进行相同的测试时:
>>> import copy
>>> objA = list()
>>> objB = copy.deepcopy(objA)
>>> objB == objA
True
>>> objB is objA
False
>>>
为什么前两个和后两个不同?有人能给我解释一下吗?这是行为:
此模块不复制诸如模块、方法、堆栈跟踪、堆栈帧、文件、套接字、窗口、数组或任何类似类型的类型。它通过原封不动地返回原始对象来“复制”函数和类(浅层和深层);这与pickle模块处理这些数据的方式兼容
至于为什么这样做,大概是因为人们不太需要有多个相同但不同的类