深浅copy
不可变对象,深浅copy效果一样
可变对象,深浅copy还是有区别的
浅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
浅copy就是值一样,但是内存地址不同,因为其为新变量重新分配了一块内存,和原来不同。
列表还可以通过切片操作符来完成。
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中换源
标签:str2,list1,list2,pip,深浅,模块,print,copy From: https://www.cnblogs.com/YeeQX/p/17481183.html