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

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

相关推荐
Logic1017 小时前
C语言/数据结构位运算题解:异或XOR找出蛋糕订单中的“VIP独特口味“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
颜颜yan_7 小时前
ESP-IDF 鸿蒙 PC 适配全记录:打通 Python、构建工具链与 ESP32-P4 固件生成
python·华为·harmonyos
言乐67 小时前
Python加速器4跨境网络加速器
运维·服务器·开发语言·网络·python
weixin_440730507 小时前
线程02-并发串行-互斥锁-Semaphore-Event
python·thread
Logic1017 小时前
C语言/数据结构位运算题解:异或XOR找出飞行棋中的“独特颜色棋子“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
爱吃苹果的日记本8 小时前
数据结构第三课(时间复杂度)
数据结构·学习
张小凡vip8 小时前
python--爬虫--经验积累的遇到的坑
开发语言·爬虫·python
毕业设计7038 小时前
(免费领源码) 基于微信小程序的预制菜商城的设计与实现25172-java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
vue.js·python·mysql·微信小程序·pycharm·微信开发者工具·推荐算法
xifangge20258 小时前
AGENTS.md 怎么写?涵盖 Java、Python、Vue、Go 的 8 套开箱即用模板
java·vue.js·python
大草原的小灰灰9 小时前
Python基础语法
开发语言·python