Python知识分享第十七天

"""

深浅拷贝:

  1. 所谓的深浅拷贝区别是: 拷贝的多还是拷贝的少, 浅拷贝拷贝的少, 深拷贝拷贝的多.

  2. 深浅拷贝都是既可以操作可变类型, 也可以操作不可变类型,

  3. 所谓的深浅拷贝指的是 copy模块的两个函数:

浅拷贝: copy.copy(...)

深拷贝: copy.deepcopy(...)

  1. 深浅拷贝操作不可变类型时, 效果和普通赋值一样.

深浅拷贝操作可变类型时, 浅拷贝只拷贝第1层. 深拷贝是只要某层还是可变类型, 就会一致拷贝下去.

"""

python 复制代码
# 深拷贝和浅拷贝,请自己设计案例,内容包括:
# - 浅拷贝可变类型
import copy
a = [1, 2, 3]
b = [3, 4, 5]
c = [3, 5, a, b]
d = copy.copy(c)
# a,b没有开辟新空间 还是原来的 浅拷贝只拷贝第一层
# print(id(a))
# print(id(b))
# print(id(d[2]))
# print(id(d[3]))





# - 浅拷贝不可变类型
a = (1, 2, 3)
b = (3, 4, 5)
c = (3, 5, a, b)
d = copy.copy(c)
# 都没有开辟新空间 引用指向原来的内存地址




# - 深拷贝可变类型
a = [1, 2, 3]
b = [3, 4, 5]
c = [3, 5, a, b]
d = copy.deepcopy(c)
# d是新地址 ab也是新地址  深拷贝只要有变量会一直拷贝 创建新的空间存储
print(id(a))
print(id(b))
print(id(d[2]))
print(id(d[3]))


# - 深拷贝不可变类型
a = (1, 2, 3)
b = (3, 4, 5)
c = (3, 5, a, b)
d = copy.deepcopy(c)
# 都没有开辟新空间 引用指向原来的内存地址

"""

属性介绍:

概述:

它 = 名词, 用于描述事物的外在特征的, 例如: 学生 -> 姓名, 年龄, 性别...

分类:

根据编写的位置不同, 主要分为:

类变量

对象变量

类变量介绍:

概述:

属于类的变量, 即: 能被该类下所有对象所共享的变量, 即: A对象修改了类变量的值, 对B对象有直接影响(访问的也是修改后的)

定义格式:

类内: 属性名 = 属性值, 要写到类中, 函数外.

调用格式:

类名.属性名

对象名.属性名 # 可以这么写, 不报错, 但是不推荐.

细节:

如果修改类变量的值, 只能通过 类名.属性名 = 属性值的方式来修改.

如果是用 对象名.属性名 = 属性值 的方式来改值, 不是修改类变量的值, 而是给该对象新增了1个 对象变量(对象属性)

对象变量介绍:

概述:

属于每个对象的变量, 即: A对象修改了它的属性值, 对B对象没有任何影响.

定义格式:

类外: 对象名.属性名 = 属性值

类内: 要定义到 init ()魔法方法中.

调用格式:

类外: 对象名.属性名

类内: self.属性名

"""

python 复制代码
class Student:
    # 定义类变量 -> 能被该类所有对象所共享.
    teach_name = '娄德发'  # 类变量

    # 定义 对象属性
    def __init__(self):
        self.age = 38  # 对象属性 -> 该类所有对象都有.
if __name__ == '__main__':
	 print(Student.teach_name)       

"""

类方法:

概述:

属于类的方法, 必须被 @classmethod 装饰器修饰, 且形参列表的第1个参数必须是 类对象, 一般用: cls表示.

调用格式:

类名.方法名()

对象名.方法名() # 可以, 但是不推荐.

静态方法:

概述:

类似于 类方法, 只不过形参列表无强制要求, 可以 按需传入. 用 @staticmethod 来修饰.

调用格式:

类名.方法名()

对象名.方法名() # 可以, 但是不推荐.

大白话总结:

  1. 类方法 和 静态方法的区别是: 在函数内部你是否需要用到 类的引用, 如果需要用, 就定义成类方法, 否则定义成静态方法. 其它无任何区别.

  2. 静态方法 和 类方法是优先于 对象存在的, 所以: 如果某个函数中不需要使用到self对象, 就可以考虑将这个函数定义成 静态方法 或者 类方法.

"""

python 复制代码
# 1. 定义学生类.
class Student:
    teach_name = '坤坤'   # 类变量(类属性)

    # 定义类方法:  1. @classmethod修饰    2. 形参列表的第1个参数 -> 类的引用.
    @classmethod
    def method(cls):
        print('我是类方法')
        print(f'访问类属性: {cls.teach_name}')
        print(f'cls: {cls}')    # <class '__main__.Student'>

    # 定义静态方法: 用 @staticmethod 装饰器修饰即可.
    @staticmethod
    def func():
        print('我是 静态方法')
        print(f'访问类属性: {Student.teach_name}')

# 2. 在main函数中测试调用.
if __name__ == '__main__':
    # 创建学生对象.
    s1 = Student()

    # 调用类方法.
    Student.method()
    print('-' * 22)
    s1.method()     # 可以, 但是不推荐.
    print('-' * 22)

    # 调用静态方法.
    Student.func()
    print('-' * 22)
    s1.func()

"""
dict 属性介绍:

概述:

它是一个内置的属性, 可以把 对象 直接转成其对应的 键值对形式.

键名: 属性名, 值: 属性值.

细节:

它是Python的一个内置属性, 任何的类都有.

"""

字典名 = 对象名.dict

坚持分享 共同进步 如有错误 欢迎支持

相关推荐
木卫二号Coding3 分钟前
第七十二篇-V100-32G+WebUI+Flux.1-Schnell+Lora+文生图
开发语言·人工智能·python
墨笔之风3 分钟前
基于python 实现的小游戏
开发语言·python·pygame
多米Domi0114 分钟前
0x3f 第24天 黑马web (安了半天程序 )hot100普通数组
数据结构·python·算法·leetcode
BoBoZz194 分钟前
AnatomicalOrientation 3D人体模型及三个人体标准解剖学平面展示
python·vtk·图形渲染·图形处理
love530love5 分钟前
EPGF 新手教程 11在 PyCharm(中文版 GUI)中创建 uv 环境,并把 uv 做到“项目自包含”(工具本地化为必做环节)
ide·人工智能·python·pycharm·conda·uv·epgf
jackylzh6 分钟前
cmd或其它终端的dos命令 & events.out.tfevents文件怎么打开
python
gis_rc6 分钟前
python下shp转3dtiles
python·3d·cesium·3dtiles·数字孪生模型
廖圣平7 分钟前
直播间福袋脚本,研究json格式【一】
python
Lkygo9 分钟前
ragflow 构建本地知识库指南
人工智能·python·语言模型
TTGGGFF2 小时前
Supertonic 部署与使用全流程保姆级指南(附已部署镜像)
开发语言·python