Python 列表赋值、浅拷贝、深拷贝-02

版权声明:本文为博主原创文章,转载请注明原文链接。 https://blog.csdn.net/Frank_Abagnale/article/details/82459019

”’
关于python中列表、字典的深浅拷贝问题之前认识比较模糊,之前的笔记中其实只是区分了拷贝和赋值的问题,
今天以列表为例重新学习一下:
关于深浅拷贝和赋值的概念:
a.直接赋值: 用等号 = ,其实就是对象的引用
b.浅拷贝: 用copy( ),拷贝父对象,但是不会拷贝内部子对象
c.深度拷贝: 用deepcopy,是采用大模块copy中的deepcopy方法,完全拷贝父对象和子对象
”’

#!/usr/bin/env python
# -*- coding: utf-8 -*-


import copy

def print_all_list(a=[],b=[],c=[],d=[],e=[],f=[],log=''):
  print log
  print "a:", a
  print "b:", b
  print "c:", c
  print "d:", d
  print "e:", e
  print "f:", f

if __name__ == "__main__":
  a = [0,1,2,3,[4,5,6],[7,8,9]]
  b = a                        ## 直接赋值
  c = copy.copy(a)             ## 浅拷贝
  d = copy.deepcopy(a)         ## 深拷贝
  e = list(a)                  ## 待测试
  f = a[:]                     ## 待测试
  print_all_list(a,b,c,d,e,f,"初始:a为原列表,b为赋值,c为浅拷贝,d为深拷贝,e&f待测试")

  a.append([0,0,0])
  print_all_list(a,b,c,d,e,f,"给a添加了一个列表元素[0,0,0]")
  ## 可以看到直接赋值的b也发生改变了,说明:a.直接赋值——就是对对象的引用

  a[4].append(100)
  print_all_list(a,b,c,d,e,f,"对a索引为4的子对象[4,5,6]操作,增加一个元素100")
  ## 可以看到除直接赋值的情况外,浅拷贝的索引为4的子对象也发生了变化。
  ## 说明浅拷贝只拷贝父对象,但是不会拷贝内部子对象。对于父对象中的子对象只是进行索引。
  ## 而深拷贝,则是完全创建了一个新的列表。

  ##最终可以看到,e=list(a)、f=a[:]两种方式也是浅拷贝。

'''
输出
初始:a为原列表,b为赋值,c为浅拷贝,d为深拷贝,e&f待测试
a: [0, 1, 2, 3, [4, 5, 6], [7, 8, 9]]
b: [0, 1, 2, 3, [4, 5, 6], [7, 8, 9]]
c: [0, 1, 2, 3, [4, 5, 6], [7, 8, 9]]
d: [0, 1, 2, 3, [4, 5, 6], [7, 8, 9]]
e: [0, 1, 2, 3, [4, 5, 6], [7, 8, 9]]
f: [0, 1, 2, 3, [4, 5, 6], [7, 8, 9]]
给a添加了一个列表元素[0,0,0]
a: [0, 1, 2, 3, [4, 5, 6], [7, 8, 9], [0, 0, 0]]
b: [0, 1, 2, 3, [4, 5, 6], [7, 8, 9], [0, 0, 0]]
c: [0, 1, 2, 3, [4, 5, 6], [7, 8, 9]]
d: [0, 1, 2, 3, [4, 5, 6], [7, 8, 9]]
e: [0, 1, 2, 3, [4, 5, 6], [7, 8, 9]]
f: [0, 1, 2, 3, [4, 5, 6], [7, 8, 9]]
对a索引为4的子对象[4,5,6]操作,增加一个元素100
a: [0, 1, 2, 3, [4, 5, 6, 100], [7, 8, 9], [0, 0, 0]]
b: [0, 1, 2, 3, [4, 5, 6, 100], [7, 8, 9], [0, 0, 0]]
c: [0, 1, 2, 3, [4, 5, 6, 100], [7, 8, 9]]
d: [0, 1, 2, 3, [4, 5, 6], [7, 8, 9]]
e: [0, 1, 2, 3, [4, 5, 6, 100], [7, 8, 9]]
f: [0, 1, 2, 3, [4, 5, 6, 100], [7, 8, 9]]

'''

猜你喜欢

转载自blog.csdn.net/Frank_Abagnale/article/details/82459019