# 在python3中两个类定义没有任何区别,都是继承于object
# 在python2 中Myclass称为旧式类
class Myclass:
pass
# 在python2 中Myclass1称为新式类
class Myclass1(object):
pass
c = Myclass()
c1 = Myclass1()
print type(c) # <type 'instance'>
print type(c1) # <class '__main__.Myclass1'>
print type(Myclass) # <type 'classobj'>
print type(Myclass1) # <class 'type'>
c = Myclass()
c1 = Myclass1()
print(type(c)) # <class '__main__.Myclass'>
print(type(c1)) # <class '__main__.Myclass1'>
print(type(Myclass)) # <class 'type'>
print(type(Myclass1)) # <class 'type'>
type(object_or_name, bases, dict)
type(object) -> the object's type
type(name, bases, dict) -> a new type
type(name, bases, dict)
查看type的init方法
what也就是类名,必须要传入
def __init__(cls, what, bases=None, dict=None): # known special case of type.__init__
"""
type(object_or_name, bases, dict)
type(object) -> the object's type
type(name, bases, dict) -> a new type
# (copied from class doc)
"""
pass
不传入bases和dict创建一个类
Myclass = type('Myclass')
print(Myclass) # <class 'str'>
str1 = Myclass('124')
print(str1) # 124
print(type(str1)) # <class 'str'>
print(type(Myclass)) # <class 'type'>
传入bases和dict创建一个类
def func(self):
print(f'name:{self.name},age:{self.age}')
dict1 = {'name': 'zx', 'age': 18, 'func': func}
Myclass1 = type('Myclass1', (object,), dict1)
print(Myclass1) # <class '__main__.Myclass1'>
print(type(Myclass1)) # <class 'type'>
m1 = Myclass1()
print(m1.name) # zx
print(m1.age) # 18
m1.func() # name:zx,age:18
a = 10 # a指向10,计数1
b = a # b引用a,a引用10,实际上b也引用10,计数2
引用计数减少
import sys
print(sys.getrefcount(9999)) # 3
a = 9999
print(sys.getrefcount(9999)) # 4
b = a
print(sys.getrefcount(9999)) # 5
a = 10
b = 10
print(a is b) # True
print(id(a), id(b)) # 4305020224 4305020224
li1 = [11, 22]
li2 = li1
li3 = [11, 22]
print(li1 is li2) # True
print(li1 is li3) # False
print(id(li1), id(li2), id(li3)) # 4326199176 4326199176 4326199240
li = [1, 2, 3]
li1 = li.copy()
li2 = li
# 4326199176 4326199240 4326199176
print(id(li), id(li1), id(li2))
li.append(33)
print(li, li1, li2) # [1, 2, 3, 33] [1, 2, 3] [1, 2, 3, 33]
a = [1, 2]
li = [11, 22, a]
li1 = li.copy()
print(li, li1) # [11, 22, [1, 2]] [11, 22, [1, 2]]
# 4348084936 4632599496
print(id(li), id(li1))
a.append(3)
print(li, li1) # [11, 22, [1, 2, 3]] [11, 22, [1, 2, 3]]
print(id(li), id(li1)) # 4354376392 4632599560
li2 = copy.deepcopy(li)
# 4339696328 4632595208 4326199240
print(id(li), id(li1), id(li2))
# [11, 22, [1, 2, 3]] [11, 22, [1, 2, 3]] [11, 22, [1, 2, 3]]
print(li, li1, li2)
a.remove(3)
# 4339696328 4632595208 4326199240
print(id(li), id(li1), id(li2))
# [11, 22, [1, 2]] [11, 22, [1, 2]] [11, 22, [1, 2, 3]]
print(li, li1, li2)