python list赋值给另一个list,python list 取值

  python list赋值给另一个list,python list 取值

  本文主要介绍了Python中链表的赋值方法以及遇到的问题如何处理,记录了链表赋值过程中遇到的问题,并总结了链表复制的相关知识。有需要的朋友可以参考一下。

  00-1010 1.列表分配方法2。shallowcopy)3。深度复制4。问题起源:复制行动提醒

  本文的原因是在使用b=a的直接赋值给list时,结果与预期不同。后来发现直接用等号=赋值链表会产生一系列问题,于是记录了赋值、轻拷贝、深拷贝之间的区别。

  

目录

 

  在python中,一个对象的赋值是一个简单的对象引用,这与C,

  如下例子所示:

  a=[a , b , c]

  B=a #采用简单=赋值。

  打印(a==b)

  #以下是输出结果:

  真实的

  在上面的例子中,B和A是相同的,它们指向同一块内存,B只是A的别名和引用。我们可以判断A和B是否相同,返回True,表示地址和内容相同。

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

  修改A影响B;类似地,修改B会影响a。下面的示例尝试修改B并在它后面添加一个新元素“d”。通过观察输出结果发现,在修改List B的同时,List A也会被修改,因为两者使用的内存空间是一样的。

  a=[a , b , c]

  b=a

  b .追加( d )

  print(a={} )。格式(a))

  print(b={} )。格式(b))

  #以下是输出结果:

  a=[a , b , c , d]

  b=[a , b , c , d]

  

1.列表list赋值方法

 

  浅层复制创建一个新对象,其内容是对原始对象的引用。

  浅拷贝有三种形式:切片操作、工厂函数和拷贝模块中的拷贝函数。

  比如对上述a:

  1.切片操作:b=a[:]或b=[a中每一个的每一个]2。工厂功能:b=列表(a)3。复制函数:b=copy.copy(a) #使用时,导入复制模块的浅层复制生成的B不再是a,使用is,可以发现它们不是同一个对象。使用id查看。但是当我们用id(x)表示a中的x,用id(x)表示b中的x时,我们可以看到,它们所包含的元素的地址是相同的。

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

  代码效果如下:

  a=[a , b , c ,[黄色,红色]]

  B=a[:] #采用切片操作给链表b赋值。

  append(green) #向列表b添加元素。

  print(a={} )。格式(a))

  print(b={} )。格式(b))

  #以下是输出结果:

  a=[a , b , c ,[yellow , red]] # A中的元素不变。

  B=[a , B , c ,[yellow , red], green] # B添加元素 green

  但是要注意:轻拷贝之所以叫轻拷贝,是因为它只拷贝了一层,a里面有嵌套列表,如果我们修改了,情况就不一样了。

  答[3]。追加(“蓝色”).再看B,你会发现B也变了。这是因为您修改了嵌套列表。修改外层元素会修改其引用,使其指向其他位置,修改嵌套列表中的元素,这样列表的地址就变了,指向同一个位置。

  代码如下:

  a=[a , b ,

   c, [yellow, red]]

  b = a[:]  # 采用了切片操作对列表b进行赋值

  a[3].append(blue)  # 在a列表中的第3个元素中增加元素blue,由于a[3]本身也是一个列表,从而是在列表后增加了元素blue,从输出结果中可以看出来。

  print(a = {}.format(a))

  print(b = {}.format(b))

  # 下面是输出结果:

  a = [a, b, c, [yellow, red, blue]]

  b = [a, b, c, [yellow, red, blue]]

  

 

  

3.深拷贝

 

  深拷贝只有一种形式,copy模块中的deepcopy函数。
和浅拷贝对应,深拷贝拷贝了对象的所有元素,包括多层嵌套的元素。因而,它的时间和空间开销要高。
同样对la,若使用b = copy.deepcopy(a),再修改b将不会影响到a了。即使嵌套的列表具有更深的层次,也不会产生任何影响,因为深拷贝出来的对象根本就是一个全新的对象,不再与原来的对象有任何关联。

  实例代码如下:

  

import copy

 

  或者用下面的代码:

  

import copy

 

  或者用下面的代码:

  

import copy

 

  

 

  

4.关于拷贝操作的提醒

 

  

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

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

 

  到此这篇关于Python中list列表的赋值方法及遇到问题处理的文章就介绍到这了,更多相关list列表赋值方法内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: