深浅copy、第三方模块的下载与安装

发布时间 2023-06-14 19:53:54作者: Maverick-Lucky

深浅copy

对于不可变类型,深拷贝和浅拷贝的效果是一样的。

对于可变类型,深拷贝和浅拷贝是有区别的。

浅拷贝:两者的值是相同的,在内存中重新申请了一块空间来存放新变量,所以两者的内存地址是不一样的

list1 = [1, 2, 3]
list2 = list(list1)
print(list2)
print("list1==list2 ?",list1==list2)
print("list1 is list2 ?",list1 is list2)
# 结果
[1, 2, 3]
list1==list2 ? True
list1 is list2 ? False

列表还可以通过切片操作符来完成

list1 = [1, 2, 3]
list2 = list1[:]
print(list2)
print("list1 == list2 ?",list1 == list2)
print("list1 is list2 ?",list1 is list2)

使用copy.copy()

list1 = [1, 2, 3]
list2 = copy.copy(list1)
print(list2)
print("list1 == list2 ?",list1 == list2)
print("list1 is list2 ?",list1 is list2)
对于元组,使用 tuple() 或者切片操作符 ‘:’ 不会创建一份浅拷贝,相反它会返回一个指向相同元组的引用(内存地址)。因为其不会创建一份浅copy,因为其新开辟的内存存储是原对象的子对象的引子,而没有创建新的对象来存储原对象子对象的引子,所以不是浅copy
str1 = 'operation'
str2 = str1[:]
print(str2)
print("str1 == str2 ?",str1 == str2)
print("str1 is str2 ?",str1 is str2)

operation
str1 == str2 ? True
str1 is str2 ? True

是完全重新copy,分为两个完全不同的个体。

浅copy会出现的问题:

虽然拷贝前后地址不同,但是他们共享了部分内存,就如下,列表中的列表就是共享的内存,所以在往列表中的列表添加数据时,拷贝前后的数据则一样。因为浅copy只是复制了一层。

而深copy则是数值与内存都复制了。

import copy

a = [1, [2, 3]]
b = copy.deepcopy(a)
c = copy.copy(a)

a[1].append(4)


print(f"原始列表a:{a}") # [1, [2, 3, 4]]
print(f"深拷贝出来的列表b:{b}") # [1, [2, 3]]
print(f"浅拷贝出来的列表c:{c}") # [1, [2, 3, 4]]

第三方模块的下载与安装

内置的模块不能满足我们的需求,所以,大多数的时候都需要借助于第三方模块

下载第三方模块需要使用pip工具:

pip install 模块名 # 不跟版本号,默认装的是最新版本
pip install django
pip install 模块名==版本号
pip install django == 1.1
pip install openpyxl==2.1.4

pip list

另一个方式可以用pycharm安装

换源:

把下载的路径切换到国内
"""
豆瓣:http://pypi.douban.com/simple/
阿里云:http://mirrors.aliyun.com/pypi/simple/
华为云:https://repo.huaweicloud.com/repository/pypi/simple
清华大学:https://pypi.tuna.tsinghua.edu.cn/simple
中科大:https://pypi.mirrors.ustc.edu.cn/simple/
"""

 如何换源
方式1:
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple # 临时换源
永久换源
# 你自己搜索windows下如何永久换源
方式2:
pycharm中换源