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

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

相关推荐
程序员小远8 分钟前
如何使用Postman做接口自动化测试?
python·功能测试·测试工具·职场和发展·测试用例·postman·持续集成
Maki Winster12 分钟前
将收藏夹变为静态网页,本地用可以当浏览器首页
python·html5·edge浏览器
jingling55525 分钟前
adb常用指令(完整版)
数据库·人工智能·python·adb·语音识别
静心问道35 分钟前
DEBERTA:具有解耦注意力机制的解码增强型BERT
人工智能·python
BingLin-Liu1 小时前
蓝桥杯备考:二叉树详解
数据结构·二叉树
深图智能2 小时前
PyTorch使用教程(9)-使用profiler进行模型性能分析
人工智能·pytorch·python·深度学习
qw9492 小时前
MySQL(高级特性篇) 06 章——索引的数据结构
数据结构·数据库·mysql
_DCG_2 小时前
数据结构之哈希表详解
数据结构·哈希表
yuanManGan3 小时前
数据结构漫游记:动态实现栈(stack)
数据结构