Python深浅拷贝的理解

1.拷贝

拷贝实际上其实就是在赋值,比如我们有一个列表L1,定义另一个列表L2引用列表L1,实际上就是在拷贝列表L1的值,由于由于L1列表是可变的数据类型,所以当L1的值变的时候,L2的值也是在跟着变的.那其实就算L1内的是不可变的数据类型,L1的内容变化,L2的内容也一样会随之变化的

# # 拷贝(赋值)
# Python学习交流QQ群:153708845
lt = [1, 2, 3]
lt2 = lt

lt.append(4)
print(lt)
# [1, 2, 3, 4]
# 因为列表是可变类型,所以lt的值变化,lt2的值也会跟着变化
print(lt2)
# [1, 2, 3, 4]

2.浅拷贝

浅拷贝时,我们时需要在写代码前import.copy,导入copy的方法,其实列表在内存空间里是以索引的形式存在的,索引指向的才是对应的具体的值,那当我们用L2去copy列表L1的时候,那他们两个列表的索引只想的值都是一样的,如果L1的某一索引对应的值有变化的时候,L2这个列表是否变化是取决于L1列表变化的那个索引的值是否为可变化数据类型。也就是说当L1列表内的数据是可变化类型的化,L2会随之变化:L1列表内的数据是不可变的数据类型,那L2列表的数据则不会跟着变化。

# 浅拷贝
# copy.copy()
import copy

l1 = ['xichen','nick','egon',['rockey','pilipili']]
l2 = copy.copy(l1)
l1.append('xuchen')
print(l1)
# ['xichen', 'nick', 'egon', ['rockey', 'pilipili'], 'xuchen'] 
print(l2)
# ['xichen', 'nick', 'egon', ['rockey', 'pilipili']]

l1[-1].append('xucheng')
print(l1)
# ['xichen', 'nick', 'egon', ['rockey', 'pilipili', 'xucheng']]
print(l2)
# ['xichen', 'nick', 'egon', ['rockey', 'pilipili', 'xucheng']]

3.深拷贝

深拷贝和浅拷贝一样,在写代码之前需要import.copy导入copy的方法,但是我们深拷贝的时候用的是deepcopy,其他的语法和浅拷贝是一样的,但是深拷贝和浅拷贝不一样的是,深拷贝不管列表L1里面的内容是可变还是不可变的,当L1变化的时候,L2列表里面的数据都不会改变的

import copy
lt = [1000, 2000, 3000, [4000, 5000, 6000]]
print('id(lt)',id(lt))
print('id(lt[0])', id(lt[0]))
print('id(lt[1])', id(lt[1]))
print('id(lt[2])', id(lt[2]))
print('id(lt[3])', id(lt[3]))
print('*' * 50)
# id(lt) 2608713900296
# id(lt[0]) 2608710450544
# id(lt[1]) 2608593350352
# id(lt[2]) 2608594909872
# id(lt[3]) 2608713954696
**************************************************

lt2 = copy.deepcopy(lt)
print('id(lt2)',id(lt2))
print('id(lt2[0])', id(lt2[0]))
print('id(lt2[1])', id(lt2[1]))
print('id(lt2[2])', id(lt2[2]))
print('id(lt2[3])', id(lt2[3]))
print('*' * 50)
# id(lt2) 2608713900616
# id(lt2[0]) 2608710450544
# id(lt2[1]) 2608593350352
# id(lt2[2]) 2608594909872
# id(lt2[3]) 2608713900744
**************************************************

总结:

  • 牢记: 拷贝/浅拷贝/深拷贝 只针对可变数据类型
  • 拷贝: 当lt2为lt的拷贝对象时,lt内的可变类型变化,lt2变化;lt内的不可变类型变化,lt2变化简单的赋值
  • 浅拷贝:当lt2为lt的浅拷贝对象时,lt内的可变类型变化,lt2变化;lt内的不可变类型变化,lt2不变化copy.copy() 可变数据的类型中的内置方法.copy()
  • 深拷贝: 当lt2为lt的深拷贝对象时,lt内的可变类型变化,lt2不变化;lt内的不可变类型变化,lt2不变copy.deepcopy()

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python深浅拷贝的理解 - Python技术站

(0)
上一篇 2023年3月31日
下一篇 2023年3月31日

相关文章

  • Python中12个常用模块的使用教程

    1. time模块 import time *一*#时间戳–》结构化时间–》格式化的字符串时间 —————————————————————————– res1=time.localtime(654126574) print(res1 ) #res1===…

    Python开发 2023年4月2日
    00
  • Python在不同对象中使用 in 操作符的查找效率

    前言 在Python中 in 操作符可以用于判断某个元素是否存在于当前对象中,而对于不同的Python对象,使用 in 操作符的处理效率是不一样的。 今天我们主要针对 4 种不同的Python数据类型进行学习:list列表、tuple元组、set集合、dict字典。 测试过程 我们用于测试的 4 种Python数据类型,分别为 tmp_list 、tmp_t…

    Python开发 2023年4月2日
    00
  • Python生成随机数的一个标准库-random

    1.介绍 Random库Python中用于生成随机数的一个标准库。计算机没有办法产生真正的随机数,但它可以产生伪随机数。 伪随机数是计算机按照一定的运算规则产生的一些数据,只不过这些数据表现为随机数的形式。计算机中采用梅森旋转算法生成为随机序列,序列中的每一个元素就是伪随机数,由于计算机不能产生真正的随机数,所以伪随机数也就被称为随机数。 Random库包含…

    python 2023年4月27日
    00
  • Python条件语句和循环语句简单使用方法

    1.Python条件语句 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块。 可以通过下图来简单了解条件语句的执行过程:Python程序语言指定任何非0和非空(null)值为true,0 或者 null为false。 Python 编程中 if 语句用于控制程序的执行,基本形式为: if 判断条件: 执行语句………

    Python开发 2023年4月2日
    00
  • Python教程:常用网页字符串处理技巧

    首先一些Python字符串处理的简易常用的用法。其他的以后用到再补充。 1.去掉重复空格 s = “hello hello hello” s = ‘ ‘.join(s.split()) 2.去掉所有回车(或其他字符或字符串) s = “hello\nhello\nhello hello\n” print(s) s = s.replace(“\n”,””) p…

    Python开发 2023年4月2日
    00
  • python3教程:json、pickle和sqlite3持久化存储字典对象

    在各种python的项目中,我们时常要持久化的在系统中存储各式各样的python的数据结构,常用的比如字典等。尤其是在云服务类型中的python项目中,要持久化或者临时的在缓存中储存一些用户认证信息和日志信息等,最典型的比如在数据库中存储用户的token信息。在本文中我们将针对三种类型的python持久化存储方案进行介绍,分别是json、pickle和pyt…

    Python开发 2023年4月2日
    00
  • Python学习:获取代理ip以及使用

    python爬虫浏览器伪装 #导入urllib.request模块 import urllib.request #设置请求头 headers=(“User-Agent”,”Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22…

    Python开发 2023年4月2日
    00
  • Python3教程:在python/Shell/MySQL中时间获取与格式转换的方法总结

    时间的获取及时间各格式间的转换是比较常用的操作,但一是多种语言经常容易弄混,二是同一种语言同一个功能可能有不同的实现函数,导致每次处理时间经常要百度所以来记录一下。 另外个人真不喜欢同样功能有多种写法的形式,从理想角度说多种实现方式让不同的人都能以其喜欢的方式进行编写;但实际上当你忘记的时候,你就总要怀疑是不是这么写、可不可以这么写、到底怎么写,然后到网上看…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部