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

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

相关推荐
工作碎碎念4 分钟前
pandas
python
Dovis(誓平步青云)9 分钟前
《C++哈希表:高效数据存储与检索的核心技术》
数据结构·散列表·哈希表
A7bert7771 小时前
【YOLOv5部署至RK3588】模型训练→转换RKNN→开发板部署
c++·人工智能·python·深度学习·yolo·目标检测·机器学习
冷月半明1 小时前
时间序列篇:Prophet负责优雅,LightGBM负责杀疯
python·算法
秋难降1 小时前
聊聊 “摸鱼式” 遍历 —— 受控遍历的小心机
数据结构·算法·程序员
教练我想打篮球_基本功重塑版1 小时前
L angChain 加载大模型
python·langchain
Code_Artist2 小时前
[Java并发编程]4.阻塞队列
java·数据结构·后端
嗑嗑嗑瓜子的猫2 小时前
大白话聊一聊,数据结构的基石:数组和链表
数据结构·链表·数组
跟橙姐学代码3 小时前
手把手教你玩转 multiprocessing,让程序跑得飞起
前端·python·ipython
LCS-3124 小时前
Python爬虫实战: 爬虫常用到的技术及方案详解
开发语言·爬虫·python