python复制列表元素_Python学习教程:Python列表赋值,复制,深拷贝及5种浅拷贝详解...

Python学习教程:Python列表赋值,复制,深拷贝及5种浅拷贝详解

概述

在列表复制这个问题,看似简单的复制却有着许多的学问,尤其是对新手来说,理所当然的事情却并不如意,比如列表的赋值、复制、浅拷贝、深拷贝等绕口的名词到底有什么区别和作用呢?

列表赋值

# 定义一个新列表

l1 = [1, 2, 3, 4, 5]

# 对l2赋值

l2 = l1

print(l1)

l2[0] = 100print(l1)

示例结果:

[1, 2, 3, 4, 5]

[100, 2, 3, 4, 5]

可以看到,更改赋值后的L2后L1同样也会被更改,看似简单的“复制”,在Python中,列表属于可变对象,而对可变对象的复制其实就是将列表的内存空间类似C中的指针再次指向新的变量名,而不是诸如字符串这种不可变对象在复制时会创建新的内存空间进行赋值。即此时L1和L2指向的是同一片内存空间,那么怎么实现真正复制呢?

浅拷贝

当列表中的元素为不可变对象时,我们可以用以下方法对列表进行赋值:

import copy

# 定义一个新列表

L0 = [1, 2, 3, 4, 5]

print(L0)

print('-'*40)

利用切片

L1 = L0[:]

L1[0] = 100print(L0)

利用模块copy

import copyL2 = copy.copy(L0)

L2[0] = 100print(L0)

利用list()

L3 = list(L0)

L3[0] = 100print(L0)

利用列表方法extend

L4 = []

L4.extend(L0)

L4[0] = 100print(L0)

利用列表推导

L5 = [i for i in L0]

L5[0] = 100print(L0)

可以看到最终的打印结果都是[1, 2, 3, 4, 5],我们成功进行了列表的复制,但是为了条件需要是列表中元素为不可变对象呢? 因为如果列表中的元素为可变对象,在复制时有会发生对象的引用,而不是新建内存空间进行引用,比如:

L0 = [1, 2, [3], 4, 5]

print(L0)

L2 = L0[:]

L2[2][0] = 100

print(L0)

示例结果:

[1, 2, [3], 4, 5]

[1, 2, [100], 4, 5]

可以看到,当列表L0中含有可变对象时,对复制后的L1进行改变其中可变对象元素L2[2]时,L0中的可变对象L0[2]也发生了改变,那么怎么实现真正的完全的拷贝呢?

深拷贝

利用copy模块中的deepcopy进行深拷贝:

import copy

L0 = [1, 2, [3], 4, 5]

print(L0)

L2 = copy.deepcopy(L0)

L2[2][0] = 100

print(L2)

print(L0)

示例结果:

[1, 2, [100], 4, 5]

[1, 2, [3], 4, 5]

更多的

Python学习教程

会继续为大家更新!初学Python的小伙伴们也要跟着系统的

Python学习路线

走哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/511908.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IPv6时代,中小企业该如何布局?

简介:IPv6要为全世界的每一粒沙子都分配一个IP,你的企业跟上了吗? 11月中旬,中央网信办等部门联合印发了《关于开展IPv6技术创新和融合应用试点工作的通知》,联合组织开展IPv6技术创新和融合应用试点工作,…

Gartner 发布新兴技术研究:深入洞悉元宇宙

供稿 | Gartner出品 | CSDN云计算根据Gartner预测,2026年全球30%的企业机构将拥有元宇宙产品和服务。元宇宙是一个由独立但相互连接的网络所组成的持久、沉浸式数字环境,但目前尚未确定这些网络将使用的通信协议。元宇宙能够实现持久、去中心化、可互操作…

android init.d脚本,◇添加init.d脚本支持教程贴◇

☆修改系统有风险,本人不承担任何后果!!☆【安卓2.3及以上系统通用】研究了好长时间终于找到了自己手动添加的方法,一种方法就是厨房,但没有boot.img是无法添加内核支持,第二种方法就是软件添加,然后再让它开机自动运行.经过我的研…

并发场景下的幂等问题——分布式锁详解

简介:本文从钉钉实人认证场景的一例数据重复问题出发,分析了其原因是因为并发导致幂等失效,引出幂等的概念。针对并发场景下的幂等问题,提出了一种实现幂等可行的方法论,结合通讯录加人业务场景对数据库幂等问题进行了…

前端vue里面点击加载更多_vue 原生添加滚动加载更多

vue中添加滚动加载更多,因为是单页面所以需要在跳出页面时候销毁滚动,要不会出现错乱。我们在mounted建立滚动,destroyed销毁滚动。mounted () {window.addEventListener(scroll, this.handleScroll)},destroyed () {window.removeEventListe…

双11特刊|十年磨一剑,云原生多模数据库Lindorm 2021双11总结

前言 2021 年,转眼 Lindorm 已经在阿里发展了十年的时间,从基于 HBase 深度改造的 Lindorm 1.0 版本,到全面重构,架构大幅升级的 Lindorm 2.0 版本;从单一的宽表引擎,到支持搜索、时序、文件等多种结构化数…

怎么样升级成为鸿蒙系统,手机升级成为鸿蒙系统第一手体验怎么样?-电脑自学网...

自从华为鸿蒙系统上线以来,除了6月2日发布会爆料出鸿蒙细节、功能之外,还给部分华为手机提供了鸿蒙系统的升级包。不知道大家有没有升级?其实很多小伙伴处于观望状态,因为新系统的缺点不可避免,升级了系统就再也回不去…

换个姿势看 hooks,灵感来源组合和 HOC 模式下逻辑视图分离新创意

作者 | 👽来源 | 前端Sharing前言懂得 JSX 本质的同学都知道它只不过是一种语法糖,会被 babel 处理成 createElement 的形式,最后再变成常规的 js 对象。所以,我们就可以在 js 逻辑层面对 element 对象做处理,自定义 …

双11特刊 | 云数据库RDS如何顺滑应对流量洪峰

简介:从绿色低碳到硬核科技,看RDS如何用绿色科技助力2021“双11”? 双十一回顾 从平台到商家,再从物流到客户手中,云数据库RDS支撑着双11集团电商的在线业务。RDS首次对集团核心业务进行国产化技术演进试点&#xff…

python交叉编译的配置 脚本怎么写_如何写一个简单的脚本并配置

什么是脚本:脚本就是一个给计算机照着做的东西cd ~/desktop 回到桌面mkdir demo 创建一个demo的文件夹cd demo 进入demo这一系列命令的组合就是脚本,当我们运行脚本的时候,计算机就会按着我们输入的命令一步一步操作。找一个安全的目录下&…

双11专刊|云原生数据仓库AnalyticDB支撑双11,大幅提升分析实时性和用户体验

简介:2021年双十一刚刚落幕,已连续多年稳定支持双十一大促的云原生数据仓库AnalyticDB,今年双十一期间仍然一如既往的稳定。除了稳定顺滑的基本盘之外,AnalyticDB还有什么亮点呢?下面我们来一一揭秘。 一 前言 2021年…

html传输的数值表示的含义,数字传递游戏的意义与感悟_传数字游戏心得体会

在大学生入职培训期间,曾组织他们做了一场小游戏,游戏规则如下:1、80名学生平均分成8组,排成8列,统一面向讲台做好;2、主持人向每组的最后一名队员提供一个数字(数字一般为3位或4位数,不确定&am…

德勤2022技术趋势:IT自我颠覆、技术跨界融合创新

作者 | 宋慧 出品 | CSDN云计算 IT 技术,一直处于快速发展与变化中。 基于对前沿技术的观察分析与自身实践,国际机构德勤管理咨询每年发布对于未来 18-24 个月的的重要技术趋势。2021 年 CSDN 曾报道 德勤2021技术趋势:繁琐、点状的匠人AI时…

ios yarn 如何配置_vuejs axios安装配置与使用

1.安装服务npm install --save axios vue-axios2.在main.jsimport axios from axiosimport VueAxios from vue-axiosVue.use(VueAxios, axios)Vue.prototype.$http axios3.可以配置axios 域名前缀新建一个config文件|-- config.jsimport Env from ./env;let config {env: Env…

双11特刊|购物车实时显示到手价,看云原生内存数据库Tair如何提升用户体验?

阿里云自研内存数据库Tair诞生于2009年,是一种支持高并发低延迟访问的云原生内存数据库,完全兼容Redis,已历经多年双11大促考验,提供核心在线访问加速能力,显著提升系统吞吐量。 作为双11大促承载流量洪峰的利器&…

Dubbo-Admin 正式支持 3.0 服务治理

简介:Dubbo 相信大家并不陌生,是一款微服务开发框架,它提供了 RPC 通信与微服务治理两大关键能力。大家在日常开发中更多使用的是 Dubbo 提供的 RPC 通信这一部分能力,而对其提供的服务治理的能力使用相对少一些,本文的…

vue将文本渲染html,vue2.0 之文本渲染-v-html、v-text

vue2.0 之文本渲染-v-html、v-text1、index.html代码vuedemo2、main.js代码import Vue from ‘vue‘import App from ‘./App‘Vue.config.productionTip false/* eslint-disable no-new */new Vue({el: ‘#app‘,render: h > h(App)})render: h > h(App)是ES6的语法&am…

ajax post 没有返回_Ajax异步技术之三:jQuery中的ajax学习

jQuery中的Ajax学习:jQuery是js的一个轻量型框架,已经将js创建的操作进行了封装,而ajax也是js的一部分,所以jQuery也已经将ajax进行了封装。封装:$.get(url,data,fn) url:请求地址data:请求参数,参数格式为…

如何成为真正的数字化企业,锐捷网络发布数字原力觉醒计划

编辑 | 宋慧 出品 | CSDN 云计算 什么样的企业可称为数字化企业? 因为疫情等各类不确定因素,数字化的浪潮正深刻改变着企业。所有企业都需考虑转型、创新、增长,这三个问题。深耕中国企业级市场多年的IT技术厂商锐捷网络,以“点线…

2021中国数字服务大会 | 阿里云混合云新一代运维演进与实践

简介:12月3日,2021中国数字服务大会顺利召开,大会以“数字服务、跨界融合、协同创新”为主题,邀请产学研界嘉宾,举办行业与学术论坛,共话数字服务的挑战和机遇。阿里云作为云厂商代表应邀参会,并…