返回顶部
首页 > 资讯 > 后端开发 > Python >Python List的赋值方法
  • 198
分享到

Python List的赋值方法

赋值方法Python 2023-01-31 02:01:48 198人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

  python中关于对象复制有三种类型的使用方式,赋值、浅拷贝与深拷贝。他们既有区别又有联系,刚好最近碰到这一类的问题,研究下。 一、赋值         在Python中,对象的赋值就是简单的对象引用,这点和c++不同。如下:    

  python中关于对象复制有三种类型的使用方式,赋值、浅拷贝与深拷贝。他们既有区别又有联系,刚好最近碰到这一类的问题,研究下。

一、赋值

        在Python中,对象的赋值就是简单的对象引用,这点和c++不同。如下:        

a = [1,2,3,"hello",["python","C++"]]
b = a
print a==b #True
        这种情况下,b和a是一样的,他们指向同一片内存,b不过是a的别名,是引用。我们可以使用a与b是否相同来判断,返回True,表明他们地址相同,内容相同。

        赋值操作(包括对象作为参数、返回值)不会开辟新的内存空间,它只是复制了新对象的引用。也就是说,除了b这个名字以外,没有其它的内存开销。

        修改了a,就影响了b;同理,修改了b就影响了a。

a = [1,2,3,"hello",["python","C++"]]
b = a
b.append("ADD")
print "a=",a,"b=",b 
#a=[1, 2, 3, 'hello', ['python', 'C++'], 'ADD'] b=[1, 2, 3, 'hello', ['python', 'C++'], 'ADD']

二、浅拷贝(shallow copy)

        浅拷贝会创建新对象,其内容是原对象的引用

        浅拷贝有三种形式:切片操作,工厂函数,copy模块中的copy函数。比如对上述a:        

        1、切片操作:b = a[:]   或者 b = [each for each in a]

        2、工厂函数:b = list(a)

        3、copy函数:b = copy.copy(a)

        浅拷贝产生的b不再是a了,使用is可以发现他们不是同一个对象,使用id查看,发现它们也不指向同一片内存。但是当我们使用 id(x) for x in a 和 id(x) for x in b 时,可以看到二者包含的元素的地址是相同的。

        在这种情况下,a和b是不同的对象,修改b理论上不会影响a。比如b.append([4,5])。

a = [1,2,3,"hello",["python","C++"]]
b = a[:]
b.append("ADD")
print "a",a,"b",b
#a [1, 2, 3, 'hello', ['python', 'C++']] b [1, 2, 3, 'hello', ['python', 'C++'], 'ADD']

        但是要注意,浅拷贝之所以称为浅拷贝,是它仅仅只拷贝了一层,在a中有一个嵌套的list,如果我们修改了它,情况就不一样了。

        a[4].append("C")。查看b,你将发现b也发生了变化。这是因为,你修改了嵌套的list。修改外层元素,会修改它的引用,让它们指向别的位置,修改嵌套列表中的元素,列表的地址并为发生变化,指向的都是同一个位置。

三、深拷贝(deep copy)

        深拷贝只有一种形式,copy模块中的deepcopy函数。

        和浅拷贝对应,深拷贝拷贝了对象的所有元素,包括多层嵌套的元素。因而,它的时间和空间开销要高。

        同样对la,若使用b = copy.deepcopy(a),再修改b将不会影响到a了。即使嵌套的列表具有更深的层次,也不会产生任何影响,因为深拷贝出来的对象根本就是一个全新的对象,不再与原来的对象有任何关联。

四、关于拷贝操作的警告

        1、对于非容器类型,如数字,字符,以及其它“原子”类型,没有拷贝一说。产生的都是原对象的引用。

        2、如果元组变量值包含原子类型对象,即使采用了深拷贝,也只能得到浅拷贝。

--结束END--

本文标题: Python List的赋值方法

本文链接: https://lsjlt.com/news/186188.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python List的赋值方法
      Python中关于对象复制有三种类型的使用方式,赋值、浅拷贝与深拷贝。他们既有区别又有联系,刚好最近碰到这一类的问题,研究下。 一、赋值         在python中,对象的赋值就是简单的对象引用,这点和C++不同。如下:    ...
    99+
    2023-01-31
    赋值 方法 Python
  • Python List的赋值方法是什么
    这篇“Python List的赋值方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“...
    99+
    2024-04-02
  • java给list赋值的方法有哪些
    Java 给 List 赋值的方法有以下几种:1. 使用 add() 方法逐个添加元素:```javaList list = new...
    99+
    2023-08-29
    java
  • Python中list列表的赋值方法及遇到问题处理
    目录1.列表list赋值方法2.浅拷贝(shallowcopy)3.深拷贝4.关于拷贝操作的提醒问题起源: 本文的原因是因为在使用list的直接赋值b=a时,得到的结果与预期不同,后...
    99+
    2024-04-02
  • python中list列表复制的几种方法(赋值、切片、copy(),deepcopy())
    目录1、浅拷贝和深拷贝2、直接赋值3、for循环4、切片5、copy()方法(1)list.copy()方法(2)copy.copy()方法6、deepcopy()方法1、浅拷贝和深...
    99+
    2024-04-02
  • Python中list列表的赋值方法及遇到的问题怎么处理
    这篇文章主要介绍“Python中list列表的赋值方法及遇到的问题怎么处理”,在日常操作中,相信很多人在Python中list列表的赋值方法及遇到的问题怎么处理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”P...
    99+
    2023-06-29
  • python赋值的方法有哪几种
    在Python中,赋值可以通过以下几种方法实现:1. 单变量赋值:将一个值赋给一个变量。例如:pythonx = 102. 多变量赋...
    99+
    2023-10-18
    python
  • golang方法赋值
    Go语言是一门支持面向对象编程的语言。在面向对象编程中,一个对象包含属性和方法。当我们定义结构体时,不仅可以定义属性类型,还可以将方法赋值到结构体中,让结构体拥有更多的功能。本文将介绍如何在Go语言中给结构体赋值方法。定义结构体在Go语言中...
    99+
    2023-05-21
  • C#List的赋值问题的解决
    目录问题描述原因分析:基础概念:本地测试:问题描述 如下图所示,query1是个集合,把它赋值给了query2,当移除query2里面数据的时候,query1对应的数据也被移除了。 ...
    99+
    2024-04-02
  • C# List的赋值问题的解决
    在C#中,List对象的赋值问题可以通过以下几种方式解决:1. 使用构造函数进行赋值:```csharpList list1 = n...
    99+
    2023-08-15
    C#
  • python连续赋值的方法是什么
    Python中的连续赋值是一种将多个变量分别赋予相同或不同的值的方法。方法1:使用逗号分隔变量```pythona, b, c = ...
    99+
    2023-09-28
    python
  • python字典赋值的方法是什么
    Python中的字典是一种无序的键值对集合,每个键值对之间用逗号分隔,整个字典用花括号{}括起来表示。字典中的键必须是唯一的,而值可...
    99+
    2023-05-13
    python字典赋值 python
  • python字典赋值的方法有哪些
    Python 字典赋值的方法有以下几种:1、直接使用等号赋值使用等号将一个字典赋值给另一个字典,两个字典将指向同一个内存地址,即修改...
    99+
    2023-05-13
    python字典赋值 python
  • Python连续赋值的方法有哪些
    Python中的连续赋值有以下几种方法: 普通连续赋值:可以将多个变量连续赋予相同或不同的值。 a = b = c = 1 x,...
    99+
    2023-10-27
    Python
  • python变量赋值的方法有哪些
    Python中变量赋值的方法有以下几种: 直接赋值:使用等号(=)将一个值赋给变量。 例如:x = 5 同时赋值:可以同时给...
    99+
    2024-02-29
    python
  • PHP中利用list将数组值赋给一组变量的方法
    小编给大家分享一下PHP中利用list将数组值赋给一组变量的方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!PHP开发环境搭建工具有哪些一、phpStudy,是一个新手入门最常用的开发环境。二、WampServer,Wa...
    99+
    2023-06-14
  • python字符串赋值的方法有哪些
    在Python中,有几种方法可以赋值给字符串变量: 直接赋值:使用等号将一个字符串赋值给一个变量。例如:`str1 = "Hel...
    99+
    2023-10-25
    python
  • Python变量与赋值的方法是什么
    本篇内容介绍了“Python变量与赋值的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Python是一门独特的语言,与C语言有很大...
    99+
    2023-06-02
  • SQLServer变量赋值的方法
    本篇内容介绍了“SQLServer变量赋值的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  SQLS...
    99+
    2024-04-02
  • DIV动态赋值的方法
    这篇文章主要介绍了DIV动态赋值的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇DIV动态赋值的方法文章都会有所收获,下面我们一起来看看吧。   <htmlxmln...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作