首页 > 其他分享 >深浅拷贝、第三方模块的下载与安装、开发流程

深浅拷贝、第三方模块的下载与安装、开发流程

时间:2023-06-14 21:44:28浏览次数:53  
标签:list1 list2 pip 深浅 模块 print 拷贝 copy

深浅拷贝详解

1.对于不可变对象,深拷贝和浅拷贝的效果是一样的,因为不可变对象不需要在内存中复制

2.对于可变对象,深拷贝和浅拷贝的效果是有区别的,主要原因在于可变对象自身的可变性质

浅拷贝

1.1 使用数据类型本身的构造器

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

set1= set([1, 2, 3])
set2 = set(set1)
print(set2)
print("set1==set2 ?",set1==set2)
print("set1 is set2 ?",set1 is set2)

dict1 = {1:[1,'w'], 2:0, 3:98}
dict2 = dict(dict1)
print(dict2)
print("dict1 == dict2 ?",dict1 == dict2)
print("dict1 is dict2 ?",dict1 is dict2)

[1, 2, 3]
list1==list2 ? True
list1 is list2 ? False

{1, 2, 3}
set1==set2 ? True
set1 is set2 ? False

{1: [1, 'w'], 2: 0, 3: 98}
dict1 == dict2 ? True
dict1 is dict2 ? False

分析: 浅拷贝,为新变量重新分配一块内存,和原来变量的内存不一样,所以有

list1 is list2 ? False
set1 is set2 ? False
dict1 is dict2 ? False

但浅拷贝完,两个变量中的元素的值是一样的。

list1==list2 ? True
dict1 == dict2 ? True
set1==set2 ? True

1.2 对于列表,还可以通过切片操作符“:”来完成浅拷贝

list1 = [1, 2, 3]
list2 = 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

1.3 使用 copy.copy() 函数

函数 copy.copy() 函数,适用于任何数据类型
import copy

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

set1 = {1, 2, 3}
set2 = copy.copy(set1)
print(set2)
print("set1 == set2 ?",set1 == set2)
print("set1 is set2 ?",set1 is set2)

dict1 = {1:'xiaoming', 2:'xiahua',3:'xiaoli'}
dict2 = dict(dict1)
print(dict2)
print("dict1 == dict2 ?",dict1 == dict2)
print("dict1 is dict2 ?",dict1 is dict2)

[1, 2, 3]
list1 == list2 ? True
list1 is list2 ? False

{1, 2, 3}
set1 == set2 ? True
set1 is set2 ? False

{1: 'xiaoming', 2: 'xiahua', 3: 'xiaoli'}
dict1 == dict2 ? True
dict1 is dict2 ? False

1.4 对于元组,使用 tuple() 或者切片操作符 ‘:’ 不会创建一份浅拷贝,相反它会返回一个指向相同元组的引用

tuple1 = (1, 2, 3)
tuple2 = tuple(tuple1)
print(tuple2)
print("tuple1 == tuple2 ?",tuple1 == tuple2)
print("tuple1 is tuple2 ?",tuple1 is tuple2)

tuple1 = (1, 2, 3)
tuple2 = tuple1[:]
print(tuple2)
print("tuple1 == tuple2 ?",tuple1 == tuple2)
print("tuple1 is tuple2 ?",tuple1 is tuple2)

(1, 2, 3)
tuple1 == tuple2 ? True
tuple1 is tuple2 ? True

(1, 2, 3)
tuple1 == tuple2 ? True
tuple1 is tuple2 ? True

使用 tuple() 或者切片操作符 ‘:’ 不会创建一份浅拷贝,因为它开辟新的内存存储的是原对象的引用,而没有创建新的对象来存储原对象的子对象的引用,所以不是浅拷贝。相反它会返回一个指向相同元组的引用。

对字符串使用 str() 或者切片操作符 ‘:’,原理和 元组相同

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
str1 = 'operation'
str2 = str(str1)
print(str2)
print("str1 == str2 ?",str1 == str2)
print("str1 is str2 ?",str1 is str2)

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

也就是说,对字符串和元组使用 copy()、[:]、本身的构造器完成的复制,都只是开辟了内存存储原对象的引用,而不是存储原对象的子对象的引用。

深拷贝

1.浅拷贝示例:

import copy

a = [1, 2, 3]
b = copy.copy(a)
b.append(4)

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

上述示例中,我们使用 copy 模块的 copy() 函数实现浅拷贝。与深拷贝示例类似,我们向拷贝出的列表 b 中追加了一个值为 4 的元素,这没有影响到原始列表 a 的取值。但是需要注意的是,虽然 a 和 b 的地址不同,'但是它们共享部分内存。此时,如果我们对共享的数据对象进行了修改,就会出现意外的结果。'

下面是一个浅拷贝中的意外结果的示例:

import copy

a = [1, 2, [3, 4]]
b = copy.copy(a)
b[2].append(5)

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

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]]

在这个示例中,我们拷贝了一个嵌套列表 a,并向其嵌套列表中追加了一个元素。随后,我们输出了原始的列表、深拷贝出的 b、以及浅拷贝出的 c。输出结果表明,原始列表 a 中嵌套的列表元素变为了 [2, 3, 4]。但是,深拷贝出的列表 b 并未受到影响,而浅拷贝出的列表 c 发生了改变。这是因为浅拷贝只是复制了一层对象的引用,但是对于嵌套列表中的可变对象,它们均指向原始列表 a 中相同的内存地址。因此,当我们修改其中一个列表时,其他两者也会受到影响。

总结


从示例中我们可以看出,深拷贝是对整个对象进行拷贝,而浅拷贝是只复制浅层对象,并且共享共同的引用。因此,在实际的编程中,我们需要掌握两者的差异,并灵活地选择使用深拷贝还是浅拷贝

第三方模块的下载与安装


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

# 第三方模块的下载需要基于网络下载!

如何下载与使用

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

方式1:命令行

    pip install 模块名 # 不跟版本号,默认装的是最新版本
    pip install django
    pip install 模块名==版本号
    pip install django == 1.1
    pip install openpyxl==2.1.4
    
    
 pip list # 列出解释器中所有的模块名
1.1如何查看模块都有哪些版本号:https://pypi.org/
列如:在输入框输入Django

以下即是该模块的版本号:

方式2:pycharm安装

步骤一:

步骤二:

步骤三:

步骤四:

注意:

# 由于官方的服务器在国外,所以,下载模块的时候有可能会很慢或者下载失败
"""
解决办法:
	1. 多试几次下载尝试是否成功
	2. 可能会遇到超时的问题
	3. 换源
"""
# 把下载的路径切换到国内
"""
豆瓣: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 # 临时换源

永久配置安装源

如果我们想像以前一样直接pip install 模块而且源使用的是国内的,就需要我们配置

Windows

   """

1、文件管理器文件路径地址栏敲:%APPDATA% 回车,快速进入 C:\Users\用户\AppData\Roaming 文件夹中

2、新建 pip 文件夹并在文件夹中新建 pip.ini 配置文件

3、新增 pip.ini 配置文件内容

"""

MacOS、Linux

1、在用户根目录下 ~ 下创建 .pip 隐藏文件夹,如果已经有了可以跳过

	-- mkdir ~/.pip

2、进入 .pip 隐藏文件夹并创建 pip.conf 配置文件

	-- cd ~/.pip && touch pip.conf

3、启动 Finder(访达) 按 cmd+shift+g 来的进入,输入 ~/.pip 回车进入

4、新增 pip.conf 配置文件内容

配置文件内容

[global]

index-url = http://pypi.douban.com/simple

[install]

use-mirrors =true

mirrors =http://pypi.douban.com/simple/

trusted-host =pypi.douban.com

方式2:pycharm中换源

ATM项目前期了解

项目开发流程
	公司的类型:
    	1. 外包公司
        	
        2. 甲方公司
 几个人员角色:
	开发人员(后端开发)、前端、测试、运营、产品经理、运维、销售、UI(设计)等
  
# 需求一般出自于:运营和销售人员----->产品经理(原型图)----->UI---->前端(用代码去实现)---->后端程序员(结合原型图和设计图还有前端给你代码或者意见)(数据库,字段,后端逻辑之间的关系,最好画一个流程图出来)---->自测----->测试------>上线(运维)

# 代码仓库(git)-----》分支------》几个分支----->每个分支什么意思
dev test release master
...

标签:list1,list2,pip,深浅,模块,print,拷贝,copy
From: https://www.cnblogs.com/huangchunfang/p/17480518.html

相关文章

  • python模块导入顺序; py文件命名注意
    1先从内存中查找2再从内置模块中查找3再从python解释器系统中key为path的环境变量中从上往下查找,找到一个就结束. 都没找到则报错.  py文件命名注意:不要与内置模块名冲突.......
  • 基于XC7Z100+OV5640(DSP接口)YOLO人脸识别模块编写思路(部分1)
    填充模块设计及代码编写填充模块的功能对卷积层的输入数据进行填充操作,即在数据的四周加上一圈0,以保持特征图的尺寸不变或增大例如,将\(416*416\)的数据填充为\(418*418\)的数据填充模块的设计思路以第一层卷积层(layer0)的输入数据为例,图像尺寸为\(416*416\),通道数......
  • 深浅copy、第三方模块的下载与安装
    深浅copy对于不可变类型,深拷贝和浅拷贝的效果是一样的。对于可变类型,深拷贝和浅拷贝是有区别的。浅拷贝:两者的值是相同的,在内存中重新申请了一块空间来存放新变量,所以两者的内存地址是不一样的list1=[1,2,3]list2=list(list1)print(list2)print("list1==list2?",li......
  • 深浅copy和第三方模块下载与安装
    深浅copy不可变对象,深浅copy效果一样可变对象,深浅copy还是有区别的浅copy字典、列表、集合结果都一样list1=[1,2,3]list2=list(list1)print(list2)print("list1==list2?",list1==list2)print("list1islist2?",list1islist2)[1,2,3]list1==list2?Tru......
  • MT6761芯片规格书_MTK安卓核心板主板通讯模块
    MT6761安卓核心板具有集成的蓝牙、fm、WLAN和gps模块,是一个高度集成的基带平台,包括调制解调器和应用处理子系统启用LTE/LTE-A和C2K智能电话应用。该芯片集ARM®Cortex-A53集成到2.0GHz和强大的多标准视频编解码器中。此外,一组广泛的接口D连接外围设备包括到摄像头、触摸屏显示......
  • hfile通过bulkload拷贝到hbase方式---TODO待整理
      参考链接: http://www.ithao123.cn/content-101658.html hbase之bulkload的主要类LoadIncrementalHFiles  http://www.thinksaas.cn/group/topic/233674/ bulkload执行mv和cp的区别 使用LoadIncrementalHFiles装载HFILE到HBASE的一点心得  : 数据入HBASE一般有......
  • 多个文件拷贝到一个文件命令
    cp-rcssjsimgindex.htmlcolumn/ 选项作用-f 若目标文件已存在,则强行覆盖原文件-i 若目标文件已存在,则询问是否覆盖-p 保留源文件/目录的所有属性-r 递归复制文件和目录-d 当复制符号连接时,则目标文件也是符号连接,且与源符号链接指向相同-l 创建源文件的硬连......
  • 模块一:time模块
    一、time模块time模块是Python的标准库之一,用于处理时间相关的操作。它提供了各种函数和类,用于获取、表示和处理时间信息。1.1时间戳时间戳是指从某个固定时间(通常是1970年1月1日午夜)到现在的秒数。time模块中的time()函数可以获取当前时间的时间戳。importtimetimestamp......
  • 模块知识点总结
    当讲解Python模块时,可以按照以下详细的内容和示例进行讲解:一、什么是模块?A.定义模块:模块是一个包含了Python代码的文件,可以包含变量、函数、类和可执行的代码。模块通过将代码组织成单独的文件,方便重复使用和管理。B.模块的作用和意义:提供了代码的重用性,避免重复编写相......
  • 实验7 面向对象编程与内置模块
    实验任务1task1.py1classAccount:23def__init__(self,name,account_number,initial_amount=10):4self._name=name5self._card_no=account_number6self._balance=initial_amount7defdeposit(self,amount):......