一切皆对象和深浅拷贝

1.元类

元类的来源是:python中一切皆对象。

企业建站必须是能够以充分展现企业形象为主要目的,是企业文化与产品对外扩展宣传的重要窗口,一个合格的网站不仅仅能为公司带来巨大的互联网上的收集和信息发布平台,创新互联建站面向各种领域:阳光房网站设计全网营销推广解决方案、网站设计等建站排名服务。


1.1 什么是元类

元类就是用来实例化产生类的类

关系:元类---实例化---类(自定义的类)---实例化----对象(obj)

1.2如何查看内置的元类

1.type是内置的元类
2.我们用class关键字定义出来的所有类以及内置的类都是由内置的元类type实例化产生的

例如:在python中int、dict内置元类都继承自object类,int和dict又都是type元类的对象

print(type(int))  # 
print(type(dict)) # 

那么type和object又是什么关系呢?我们来type一下object和type!

print(type(type))  #
print(type(object)) #

其实:

1.object的元类其实是type类,object是由type类构造出来的对象
2.type是自己的对象(指针指向了自己)
3.type类又继承了object类

1.3class机制分析

1.1一切皆对象的好处

它可以通过一切皆对象,使得任何类型的变量值能够赋值给变量!
因为,其本质是变量都指向了一个内存地址,而并不是直接指向具体的数据(在其他语言中不能这样)

2.深浅拷贝

1.赋值,本质是多了一个变量指向另一个变量的内存地址

l = [11,22,[311,444,55]]
l2 = l # 赋值操作,本质就是l2指向了l的内存地址
print(l2 is l) # 结果为true

2.浅拷贝,本质是又拷贝一份内存地址指向对应的变量值

from copy import copy
l = [111,222,[333,444]]
l3 = copy(l) # 浅拷贝,只是拷贝了l的内存地址
print(l3 is l) # 结果为false
# 修改l3的列表值,l也会改变!

3.深拷贝:本质内存地址、值全部拷贝一份,非常占内存!

from copy import deepcopy

l = [111,222,[333,444]]
l4 = deepcopy(l)
print(l4 is l) # 结果为false
# 深拷贝是把内存地址、变量值全部拷贝了一份,所以修改l4中列表的值,l并不会改变
# 注意:深拷贝,拷贝的时候l列表里面的不可变类型地址并不会改变,改变的是可变类型的地址!!

本文名称:一切皆对象和深浅拷贝
本文URL:http://myzitong.com/article/dsogeji.html