详解python中的列表切片以及它与浅拷贝的关系(下)

发表于:2022-5-17 09:17

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:华明    来源:51Testing软件测试网原创

#
Python
分享:
  从上文的列表切片中,我们已经能大致看出浅拷贝的全貌了。不管是使用切片的方式获取列表的部分内容还是全部内容,python都帮我们把列表的索引以及每个列表元素的引用都拷贝了一份,相当于生成了一个新列表。下面我们来详细介绍一下浅拷贝与深拷贝。

  浅谈列表的深/浅拷贝
  浅拷贝与深拷贝是各大语言中的一个比较热门的话题,具体到每种语言,体现出的含义又略有不同。在python中,由于它一切皆对象的特性,使得我们经常在浅拷贝与深拷贝这个问题上弄得晕头转向。

  浅拷贝
  在python中,无论是数值、字符、字符串,还是列表、元组、集合、字典,都看作是一种对象。列表、元组、集合、字典属于复合对象,它们可以包含数值、字符、字符串,也可以互相嵌套。在不考虑复合对象之间互相嵌套的情形下,浅拷贝解决了复合对象拷贝以后与源对象的数据隔离问题。
  我们看如下代码:
originList = ["钢铁侠", "美国队长", "雷神", "冬兵", "浩克", "星爵", "格鲁特", "蚁人", "猩红女巫", "女武神"]
heroList02 = ["幻视", "鹰眼", "蜘蛛侠"]
element = "灭霸"
herolist01 = originList[:]
print("heroList01 的内容是:{}".format(herolist01))
print("heroList01 的地址是:{}".format(hex(id(herolist01))))
print("heroList01 第一个元素的地址是:{}".format(hex(id(herolist01[0]))))
print("originList 的内容是:{}".format(originList))
print("originList 的地址是:{}".format(hex(id(originList))))
print("originList 第一个元素的地址是:{}".format(hex(id(originList[0]))))
print("----------------接下来我们修改heroList第一个元素-----------------")
print("element 的内容是{},地址是{}".format(element, hex(id(element))))
herolist01[0] = element
print("heroList01 的内容是:{}".format(herolist01))
print("heroList01 的地址是:{}".format(hex(id(herolist01))))
print("heroList01 第一个元素的地址是:{}".format(hex(id(herolist01[0]))))
print("originList 的内容是:{}".format(originList))
print("originList 的地址是:{}".format(hex(id(originList))))
print("originList 第一个元素的地址是:{}".format(hex(id(originList[0]))))


......
查看更多精彩内容,请点击下载:
  版权声明:本文出自《51测试天地》第六十五期。51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号