一切皆对象和深浅拷贝

1.元类

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

1.1 什么是元类

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

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

1.2如何查看内置的元类

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

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

print(type(int))  # <class 'type'>
print(type(dict)) # <class 'type'>

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

print(type(type))  #<class 'type'>
print(type(object)) #<class 'type'>

其实:

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

1.3class机制分析

1.1一切皆对象的好处

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

image

2.深浅拷贝

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

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

image

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

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

image

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

from copy import deepcopy

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

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一切皆对象和深浅拷贝 - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • 基础数据类型之元组

    1.元组的定义 元组,其实就是一个不可变的‘列表’ 用小括号()定义,括号内用逗号分隔开任意类型的数据,当只有一个数据时也需要加逗号 元组中的数据是不可改变指的是:数据的内存地址不可改变,如果元组里是列表(可变类型),可以通过方法往列表里增删值!!! 2.元组的作用 按照索引/位置存放多个数据,这些数据只用于读,不用于改 3.类型转换 tuple()方法转换…

    Python开发 2023年4月2日
    00
  • 文章的评论(跟评论与子评论的制作)

    文章的评论制作 先做跟评论,在做子评论 发表评论框的制作:前端渲染发表评论框: {# 评论功能开始#} {% if request.user.is_authenticated %} <div> <p><span class=”glyphicon glyphicon-comment”>发表评论:</span>&l…

    2023年4月2日
    00
  • 支付宝支付

    支付宝支付流程 在python中封装alipay 安装 >: pip install python-alipay-sdk –upgrade # 如果抛ssl相关错误,代表缺失该包 >: pip install pyopenssl 结构 libs ├── AliPay # aliapy二次封装包 │ ├── __init__.py # 包文件 │…

    2023年4月2日
    00
  • 进程、线程补充与协程相关介绍

    补充点 1.死锁 当你知道锁的使用抢锁必须要释放锁,其实你在操作锁的时候也极其容易产生死锁现象(整个程序卡死 阻塞) from threading import Thread, Lock import time mutexA = Lock() mutexB = Lock() # 类只要加括号多次 产生的肯定是不同的对象 # 如果你想要实现多次加括号等到的是相…

    Python开发 2023年4月2日
    00
  • 面向对象高级–反射、内置方法和元类

    1.反射 1.1什么是反射 python是一门动态语言,而反射机制被视为动态语言的关键! 反射机制指的是:在程序的运行过程中,动态的获取程序的信息和对象的功能! ‘动态’:指一开始不知道程序的信息和对象的功能,只有等到运行到那的时候才会动态获取!!! 比如:x=18 在程序运行的时候,python才会通过反射机制动态的获取到这个值是整型,并不需要一开始定义的…

    Python开发 2023年4月2日
    00
  • 权限类与频率类

    权限类 主要用途:用户登录了,某个接口可能只有超级管理员才能访问,普通用户不能访问 案列:出版社的所有接口,必须登录,而且是超级管理员才能访问 分析步骤 第一步:写一个类,继承BasePermission 第二步:重写has_permission方法 第三步:在方法校验用户时候有权限(request.user就是当前登录用户) 第四步:如果有权限,返回Tru…

    2023年4月2日
    00
  • 登录功能

    思路分析 登录页面,我们还是采用ajax的方式提交用户数据 唯一需要学习的是如何制作图片验证码! 具体的登录页面效果图如下: 如何制作图片验证码 推导步骤1:在img标签的src属性里放上验证码的请求路径 补充1.img的src属性: 1.图片路径 2.url 3.图片的二进制数据 补充2:字体样式 我们计算机上之所以可以输出各种各样的字体样式,其内部其实对…

    2023年4月2日
    00
  • django中操作mysql数据库

    1.准备工作(django连接数据库) 1.本机电脑下载好mysql数据库2.打开django,修改setting.py中的DATABASES配置项 DATABASES = { ‘default’: { ‘ENGINE’: ‘django.db.backends.mysql’, ‘NAME’: ‘python’, ‘USER’: ‘root’, ‘PASSW…

    2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部