首页 > 编程语言 >Python - 列表切片 与 深拷贝、浅拷贝

Python - 列表切片 与 深拷贝、浅拷贝

时间:2024-01-05 16:23:42浏览次数:43  
标签:lst1 Python len 列表 切片 lst 可变 拷贝

1.列表list常用的方法:

lst = [1,2,3]

# append(new_item)方法相当于在列表末尾追加一个元素,相当于 lst[len: ] = new_item
lst.append(4)
print(lst)

# extend(iterable) 方法,将iterable中的每个元素逐个添加到列表中,
# 相当于 lst[len: len + len(iterable)] = iterable
lst.extend({7,8,9})
print(lst)

 

2.列表切片Slice:

#lst[start,  end,  scale]
# start 和 end 表示列表索引范围区间,左开右闭
# scale表示间隔步长,不管scale正负,切片取值依次为:start,start+scale, ...
slice1 = lst[1, 5, 2]
print(slice1)

# 切片索引值缺省
# start 默认0, end默认len,scale默认1
slice2 = lst[::]  #等价于 slice2 = lst[0:len(list):1]

list的切片是深拷贝,会生成一个副本,不会影响原列表

 

3. 深拷贝与浅拷贝

  Python解释器为了节省内存空间,如果多个变量为不可变对象且变量的值相同,则这多个变量会指向同一个内存空间,这个内存空间中存储了变量的值。

lst = [1,2, ['a', 'b', 'c']]

#浅拷贝列表
lst1 = lst.copy()
lst1[0] = 11
lst1[2][0] = 'aaa'
print(lst)

# 深拷贝列表
import copy
lst2 = copy.deepcopy(lst)
lst2[2][1] = 'bbb'
print(lst)

浅拷贝:对不可变对象进行浅拷贝,不会开辟新内存;对可变对象(如列表)进行浅拷贝:当lst经过浅拷贝生成lst1时,lst和lst1本身指向的地址不同,但是两个列表中元素的引用是相同的,不管列表元素类型是可变类型还是不可变类型。因此,对于浅拷贝的两个列表 lst 和 lst1:当修改lst1中的不可变对象时,lst列表不会改变;当修改lst1中的可变对象lst1[2]的内容时,lst列表也会随之修改。

 

深拷贝:对不可变对象进行深拷贝,不会开辟新内存;对不可变对象中包含可变元素如元组(1, 2, ['a', 'b']),深拷贝后元组中的可变类型元素也会开辟新内存;对可变对象(如列表)进行深拷贝:当lst经过深拷贝生成lst2时,lst和lst2本身的执行的地址不同,并且对于被拷贝列表lst,其中的可变类型元素以及可变类型元素中的嵌套的可变类型元素等,都会开辟新内存。这样造成的结果就是:对于深拷贝对象lst2,不论lst2的元素怎么改动,都不会影响到原被拷贝对象lst。

 

标签:lst1,Python,len,列表,切片,lst,可变,拷贝
From: https://www.cnblogs.com/zhangzhenw/p/17946798

相关文章

  • Python+Requests+PyTest+Excel+Allure 接口自动化测试实战
    本文主要介绍了Python+Requess+PyTest+Excel+Allure接口自动化测试实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧Unittest是Python标准库中自带的单元测试框架,Unittest有时候也被称为PyUnit,就像JUnit......
  • Python爬虫JS解密-baidu翻译
    请求分析参数构造流程这种提交数据得到响应的的请求,往往参数比较麻烦,所以参数的构造是得到完整请求的关键.首先我们要明确目标,爬取这个网站的目的是什么,那我们的目的就是模拟浏览器发送请求,完成翻译的功能,明确了目标之后我们再定位到相关的URL就比较容易了。现在先打开chrome的调......
  • python面向对象之派生、组合、抽象类、反射
    【派生】在子类派生的新方法中如何重用父类的功能?  【组合】(定义) (案例) (组合和继承的区别) 【抽象类】(定义) (案例) 实例化 (总结) 【反射】什么是反射 如何反射 实现反射机制的步骤 解决办法 ......
  • Python中如何进行字符串计数?
    在Python中,字符串计数是非常基本的操作,使用率极高,可用于多种情况,更是每个Python开发工程师必须掌握的基础技能之一,那么Python中如何进行字符串计数?以下是常用方法介绍。1、使用count()方法Python中的字符串类型具有count()方法,该方法可以返回特定子字符串在字符串中出......
  • Python 字符串与十六进制字符串相互转换
    Python字符串与十六进制字符串相互转换在编程中,有时候我们需要将字符串与十六进制字符串之间进行转换。下面我们将展示如何使用Python实现这两个功能。1.将字符串转换为十六进制字符串我们可以创建一个函数ascii_to_hex_string来实现这个功能。该函数将输入的字符串转换为对......
  • Python生成文件的MD5
    importhashlibdefcalc_md5(filename):md5_hash=hashlib.md5()withopen(filename,"rb")asf:#Readandupdatehashinchunksof4Kforbyte_blockiniter(lambda:f.read(4096),b""):md5_hash.up......
  • 在Python中,有几个库可以帮助我们自动寻找最适合的机器学习模型和参数。这里有两个主要
    在Python中,有几个库可以帮助我们自动寻找最适合的机器学习模型和参数。这里有两个主要的库:1.**lazypredict**¹:这个库可以快速地比较多种机器学习算法的性能,从而帮助我们选择最佳的算法。它可以在循环中迭代多个模型,这通常需要一些时间,但是使用lazypredict可以克服这个限制。下......
  • python语言在web上的应用:如何节省服务器资源?
    背景介绍在web开发中的应用广泛在web开发中的应用广泛。随着互联网的发展,web应用越来越普遍,而Python作为一种简洁、高效的编程语言,被广泛应用于web开发领域。Python提供了丰富的库和框架,如Django、Flask等,使开发人员能够快速搭建功能强大的web应用。同时,Python还具有良好的可扩展性......
  • Python武器库开发-武器库篇之上传本地仓库到Git(三十八)
    武器库篇之上传本地仓库到Git(三十八)当我们在Git中创建远程仓库和进行了SSHkey免密登陆之后,我们点击Yourrespositories可以查看我们所创建的远程仓库,如图所示:如果我们需要将本地的仓库上传到Git,首先我们需要建立一个本地的仓库,我们创建一个和远程仓库同名的本地仓库,然后进入这......
  • Python武器库开发-武器库篇之Git创建远程仓库和建立SSH key 免密登陆(三十七)
    武器库篇之Git创建远程仓库和建立SSHkey免密登陆(三十七)Git是一种版本控制系统,用于跟踪文件的更改和协调多人开发项目。它可以记录文件的历史更改,协助多人协作开发,并提供分支管理功能。Git是一个分布式系统,意味着每个人在自己的本地计算机上都有一份完整的代码仓库,并且可以独立......