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

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

相关推荐
失败尽常态5232 小时前
用Python实现Excel数据同步到飞书文档
python·excel·飞书
2501_904447742 小时前
OPPO发布新型折叠屏手机 起售价8999
python·智能手机·django·virtualenv·pygame
青龙小码农2 小时前
yum报错:bash: /usr/bin/yum: /usr/bin/python: 坏的解释器:没有那个文件或目录
开发语言·python·bash·liunx
大数据追光猿2 小时前
Python应用算法之贪心算法理解和实践
大数据·开发语言·人工智能·python·深度学习·算法·贪心算法
夏末秋也凉2 小时前
力扣-回溯-46 全排列
数据结构·算法·leetcode
Leuanghing2 小时前
【Leetcode】11. 盛最多水的容器
python·算法·leetcode
王老师青少年编程2 小时前
【GESP C++八级考试考点详细解读】
数据结构·c++·算法·gesp·csp·信奥赛
xinxiyinhe3 小时前
如何设置Cursor中.cursorrules文件
人工智能·python
诸神缄默不语4 小时前
如何用Python 3自动打开exe程序
python·os·subprocess·python 3
橘子师兄4 小时前
分页功能组件开发
数据库·python·django