精华内容
下载资源
问答
  • Python中列表的copy方法

    千次阅读 2017-05-30 01:50:00
    Python中列表的copy方法 1.在列表中存在一个名为copy的方法,就像字面意思一样copy方法是用于复制列表元素的,示例如下: 1 names = [‘Zhangsan’,’Lisi’,’WangErgou’] 2 names2 = names.copy() 3 ...
    
    

    1.在列表中存在一个名为copy的方法,就像字面意思一样copy方法是用于复制列表元素的,示例如下:

    1 names = [‘Zhangsan’,’Lisi’,’WangErgou’]
    2 names2 = names.copy()
    3 print(names,names2)

    当然执行结果也跟想象中是一样的:

    [‘Zhangsan’,’Lisi’,’WangErgou’] [‘Zhangsan’,’Lisi’,’WangErgou’]

    如果修改了其中一项元素,会不会影响复制体呢?

    1 names = [‘Zhangsan’,’Lisi’,’WangErgou’]
    2 names2 = names.copy()
    3 print(names,names2)
    4 names[1] = “Zhaowu”
    5 print(names,names2)

    结果显而易见,复制体和本体互不影响,结果如下:

    1 [‘Zhangsan’,’Lisi’,’WangErgou’] [‘Zhangsan’,’Lisi’,’WangErgou’]
    2 [‘Zhangsan’,’Zhaowu’,’WangErgou’] [‘Zhangsan’,’Lisi’,’WangErgou’]

    那么列表嵌套是否也适用呢,测试一下:

    1 names = [‘Liuneng’,’Zhaosi’,[’SongXiaofeng’,’LiuDanaodai'],’XieGuangkun’]
    2 names2 = names.copy()
    3 print(names,names2)
    4 names[2][0] = ‘XieDajiao’
    5 print(names,names2)

    额,结果好像有点不同:

    1 [‘Liuneng’,’Zhaosi’,[’SongXiaofeng’,’LiuDanaodai'],'XieGuangkun'] [‘Liuneng’,’Zhaosi’,[’SongXiaofeng’,’LiuDanaodai'],’XieGuangkun’]
    2 [‘Liuneng’,’Zhaosi’,[’XieDajiao’,’LiuDanaodai'],’XieGuangkun’] [‘Liuneng’,’Zhaosi’,[’XieDajiao’,’LiuDanaodai'],’XieGuangkun’]

    原来主列表只是存储了嵌套列表在内存中的地址,而不是所看到的数据,copy的也只是嵌套列表的地址,但两个地址指向的是内存中同一块区域,所以在对嵌套列表进行修改时,只是通过了两个复制地址而修改了真实数据,所以两个列表的元素都被改掉了。

     

    当然,肯定会有完全独立的复制的需求,此时则需要导入一个copy模块来实现了:

    1 import copy
    2 names = ['zhao','qian',['sun','li'],'zhou']
    3 names2 = copy.copy(names)
    4 print(names,names2)
    5 names[2][0] = 'wu'
    6 print(names,names2)

    执行之后得到结果:

    1 ['zhao','qian',['sun','li'],'zhou’] ['zhao','qian',['sun','li'],'zhou’]
    2 ['zhao','qian',[‘wu','li'],'zhou’] ['zhao','qian',['wu','li'],'zhou']

    -.-# 好吧,copy模块的copy方法和python列表的内置函数copy是一样的,想要完全复制则需要深层copy:

    1 import copy
    2 names = ['zhao','qian',['sun','li'],'zhou']
    3 names2 = copy.deepcopy(names)
    4 print(names,names2)
    5 names[2][0] = 'wu'
    6 print(names,names2)

    执行之后得到结果:

    1 ['zhao','qian',['sun','li'],'zhou’] ['zhao','qian',['sun','li'],'zhou’]
    2 ['zhao','qian',[‘sun','li'],'zhou’] ['zhao','qian',['wu','li'],'zhou']

    好了,最后终于得到的完全复制的结果。

    展开全文
  • 使用help函数可以看到,官方对字典和列表的copy方法均描述为浅复制,浅复制原理是复制了对象的地址(使用id函数可以观察)。>>> help(dict.copy)Help on method_descriptor:copy(...)D.copy() -> a ...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    不认同你的说法,出现这种原因在于python将int型视为不可变类型。

    使用help函数可以看到,官方对字典和列表的copy方法均描述为浅复制,浅复制原理是复制了对象的地址(使用id函数可以观察)。

    >>> help(dict.copy)

    Help on method_descriptor:

    copy(...)

    D.copy() -> a shallow copy of D

    >>> help(list.copy)

    Help on method_descriptor:

    copy(...)

    L.copy() -> list -- a shallow copy of L

    我们对对象中的不可变类型元素进行“修改”时,实际上是将这个元素指向了其他地址。这就是为什么你误解这段代码及其结果:

    >>> a[0] = 10

    >>> a

    [10, 2, [3, 4]]

    >>> b

    [1, 2, [3, 4]]

    我们使用id函数来看看其中的变化:

    >>> a = [1, 2, [3, 4]]

    >>> b = a.copy()

    >>> [id(x) for x in a]

    [1384787088, 1384787104, 49367440]

    >>> [id(x) for x in b]

    [1384787088, 1384787104, 49367440]

    可以看到地址相同,确实实现了浅复制。

    那当我们“修改”a[0]呢?

    >>> a[0] = 10

    >>> b

    [1, 2, [3, 4]]

    >>> [id(x) for x in a]

    [1384787232, 1384787104, 49367440]

    >>> [id(x) for x in b]

    [1384787088, 1384787104, 49367440]

    实际上a[0]被指向了新的地址。

    现在我们创建一个变量,其值为10,再看看它的地址:

    >>> c = 10

    >>> id(c)

    1384787232

    它指向的地址与a[0]相同。现在你知道是什么问题了吗?

    展开全文
  • 列表的copy, deepcopy

    2018-09-08 09:43:28
    #将一个列表的数据复制到另一个列表中。 import copy lsta = [1,[2,3],4] lstb = lsta[:] 或者lstb = lsta 或者lstb=lsta.copy() print(lstb) lsta[1][0] = 5 print(lsta) print(lstb) 运行结果都是: [1, [2, 3], ...
    #将一个列表的数据复制到另一个列表中。
    import  copy
    lsta = [1,[2,3],4]
    lstb = lsta[:] 或者lstb = lsta 或者lstb=lsta.copy()
    print(lstb)
    lsta[1][0] = 5
    print(lsta)
    print(lstb)
    
    运行结果都是:
    [1, [2, 3], 4]
    [1, [5, 3], 4]
    [1, [5, 3], 4]
    
    import  copy
    lsta = [1,[2,3],4]
    lstb = copy.deepcopy(lsta)
    print(lstb)
    lsta[1][0] = 5
    print(lsta)
    print(lstb)
    
    deepcopy运行结果是:
    [1, [2, 3], 4]
    [1, [5, 3], 4]
    [1, [2, 3], 4]

     

    展开全文
  • 使用help函数可以看到,官方对字典和列表的copy方法均描述为浅复制,浅复制原理是复制了对象的地址(使用id函数可以观察)。>>> help(dict.copy)Help on method_descriptor:copy(...)D.copy() -> a ...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    不认同你的说法,出现这种原因在于python将int型视为不可变类型。

    使用help函数可以看到,官方对字典和列表的copy方法均描述为浅复制,浅复制原理是复制了对象的地址(使用id函数可以观察)。

    >>> help(dict.copy)

    Help on method_descriptor:

    copy(...)

    D.copy() -> a shallow copy of D

    >>> help(list.copy)

    Help on method_descriptor:

    copy(...)

    L.copy() -> list -- a shallow copy of L

    我们对对象中的不可变类型元素进行“修改”时,实际上是将这个元素指向了其他地址。这就是为什么你误解这段代码及其结果:

    >>> a[0] = 10

    >>> a

    [10, 2, [3, 4]]

    >>> b

    [1, 2, [3, 4]]

    我们使用id函数来看看其中的变化:

    >>> a = [1, 2, [3, 4]]

    >>> b = a.copy()

    >>> [id(x) for x in a]

    [1384787088, 1384787104, 49367440]

    >>> [id(x) for x in b]

    [1384787088, 1384787104, 49367440]

    可以看到地址相同,确实实现了浅复制。

    那当我们“修改”a[0]呢?

    >>> a[0] = 10

    >>> b

    [1, 2, [3, 4]]

    >>> [id(x) for x in a]

    [1384787232, 1384787104, 49367440]

    >>> [id(x) for x in b]

    [1384787088, 1384787104, 49367440]

    实际上a[0]被指向了新的地址。

    现在我们创建一个变量,其值为10,再看看它的地址:

    >>> c = 10

    >>> id(c)

    1384787232

    它指向的地址与a[0]相同。现在你知道是什么问题了吗?

    展开全文
  • 我们先来了解一下可变与不可变类型的数据 (1)可变类型:列表,字典(内存中的数据允许被修改) 不可变类型:数字,字符串,元组(内存中的数据不允许被修改) ...(2)接着我们来看一下列表的copy方法,copy...
  • #拷贝列表a=[1,2,[4,5],3]b=a.copy() #b拷贝了a,但是这个copy是浅copy,只拷贝列表的第一层a[0]=99 #把a列表改为[99,2,[4,5],3]print(b) #b列表还是[1,2,[4,5],3]a[2][0]=44 #把a列表改为[99,2,[44,5],3]print(b) ...
  • 有时候在写工程时候,已经有一个对象了,但是需要重新生成一个对象,并且想把之前对象部分字段信息或者全部信息copy过来,这个时候可以使用new 对象,然后一行行copy的方式。这样子会很麻烦如果这个类有100个...
  • copy和浅copy具体表现在列表的列表。当改变里面列表时候,深copy和浅copy是有区别。 浅copy:就是只copy了第一层元素,对于所有引用地址类型数据,并不会copy出绝对独立数据。 深copy:(要...
  • 列表去重中的copy问题

    2020-11-06 16:43:37
    列表去重中的copy问题有多少的小伙伴知道或者了解呢?... 第三种,循环遍历,判断当前元素的个数是否大于1,然后在删除当前元素(需注意删除元素后列表的变化),无序。  今天主要说的就是第三种方法了
  • 深浅copy列表

    2020-11-24 22:27:35
    copy list1=[ 'lina', 18, [1,2] ] list2=list1.copy() :是把原列表第一层的的内存地址不加区分完全copy一份给新列表 ...小结:如果想copy一个新的列表,想让两个列表完全独立开,并且针对改
  • 列表深浅copy

    2018-05-07 21:02:00
    # l1 = [1, 2, 3]# l2 = l1# l3 = l2# l3.append(666) #对l3增加一个元素,l1和l2也都增加了# print(id(l1),id(l2),id(l3)) #三个内存地址相同# print(l1, l2, l3)# 结果:1414378562376 141437856...
  • name2=names.copy() 下面我看几种奇怪的现象: 首先把源列表copy以后,把源列表第2个数值修改。那么没毛病。 ...如果源列表里,还包含了一个子列表:这也没毛病 ...只会COPY列表的内存指针,内存地址。 如果你...
  • 列表的Copy与DeepCopy

    2016-12-12 10:19:01
    import copy originalList = ['a','b',[1,2]] passingList = originalList print('OriginalList:') print(originalList) copyList = copy.copy(originalList) deepcopyList = copy.deepcopy(originalList) print('__
  • python中列表copy

    2018-02-10 20:12:50
    python中copy为浅复制可见,copy只能copy第一层,列表里包含列表等时,copy的是内存地址而如果不copy,直接赋值呢,那么直接传递就是内存地址那如果想深copy呢,引入copy模块,copy.copy()事实上。,浅copy不只有...
  • 列表的深浅copy 对于列表这种复杂数据类型变量在内存中保存的形式如下: 列表中保存的是数据的内存地址而不是数据本身 列表在内存中的存在
  • Python列表copy

    2015-04-26 15:53:42
    问题描述:已知一个列表,求生成一个新的列表,列表元素是原列表的复制 a=[1,2] b=a 这种做法其实并未真正生成一个新的列表,b指向的仍然是a所指向的对象。这样,如果对a或b的元素进行修改,a,b的值同时...
  •  方法 说明  lst.append(x) 将元素x添加至列表lst尾部 ...将列表L中所有元素添加至列表lst尾部 ...在列表lst中删除首次出现指定元素,该元素之后所有元素前移一个位置  lst.pop([in..
  • 几个copy方法 import copy a = [1, 2, [3, 4], 5] b = a c = [] c[:] = a d = a.copy() e = [] for i in a: e.append(i) f = [] f.extend(a) g = copy.copy(a) h = copy.deepcopy(a) i = a[:] print(a, b, c, d, e,...
  • python列表深浅copy

    2018-11-05 22:32:00
    列表赋值和平常赋值是不一样,看下面代码: In [1]: a = 1 In [2]: b = a In [3]: a Out[3]: 1 In [4]: b Out[4]: 1 In [5]: id(a) Out[5]: 4452948992 In [6]: id(b) Out[6]:...
  • list 封装的copy 方法实现对列表的浅拷贝,浅拷贝只拷贝一层,到底是怎么回事呢?今天番茄加速就来讲一下。 In [38]: c =[1,3,5] In [39]: cc = c.copy() c和cc分别指向一片不同内存,这样修改cc的第一个元素,原来c...
  • 第三种,循环遍历,判断当前元素的个数是否大于1,然后在删除当前元素(需注意删除元素后列表的变化),无序。今天主要说的就是第三种方法了。示例代码:list1 = [1,3,4,1,2,2,2,2,1,2]for item in lis...
  • 列表去重中的copy问题有多少的小伙伴知道或者了解呢?不清楚的小伙伴也不要着急,本篇文章好程序员Python培训小编就给读者们分享一下列表去重中的copy问题,希望对读者们有所帮助。 一般而言,列表去重无非那几种...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,553
精华内容 1,421
关键字:

列表的copy