"""
深浅拷贝:
-
所谓的深浅拷贝区别是: 拷贝的多还是拷贝的少, 浅拷贝拷贝的少, 深拷贝拷贝的多.
-
深浅拷贝都是既可以操作可变类型, 也可以操作不可变类型,
-
所谓的深浅拷贝指的是 copy模块的两个函数:
浅拷贝: copy.copy(...)
深拷贝: copy.deepcopy(...)
- 深浅拷贝操作不可变类型时, 效果和普通赋值一样.
深浅拷贝操作可变类型时, 浅拷贝只拷贝第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 来修饰.
调用格式:
类名.方法名()
对象名.方法名() # 可以, 但是不推荐.
大白话总结:
-
类方法 和 静态方法的区别是: 在函数内部你是否需要用到 类的引用, 如果需要用, 就定义成类方法, 否则定义成静态方法. 其它无任何区别.
-
静态方法 和 类方法是优先于 对象存在的, 所以: 如果某个函数中不需要使用到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
坚持分享 共同进步 如有错误 欢迎支持