美文网首页
【python】copy和赋值

【python】copy和赋值

作者: 我写的BUG代码少 | 来源:发表于2020-09-12 22:02 被阅读0次

shallow copy 和 deep copy

【引用】https://blog.csdn.net/u010712012/article/details/79754132

  • 对于简单的 object,用 shallow copy 和 deep copy 没区别
  • 复杂的 object, 如 list 中套着 list 的情况
    • shallow copy 中的 子list,并未从原 object 真的「独立」出来
    • 也就是说,如果你改变原 object 的子 list 中的一个元素,你的 copy 就会跟着一起变。
  • copy.deepcopy().copy() 是一样的
import copy

x = [1,[10]]
y = copy.copy(x)      # 尽管内存地址变了,但浅层copy无法让子list真正独立     
z = copy.deepcopy(x)  # z = x.copy()
y[1][0] = 250
print('x',x)
print('y',y)
print('z',z)
print(id(x))
print(id(y))
print(id(z))

>>>

x [1, [250]]
y [1, [250]]
z [1, [10]]
2232827410688
2232822278912
2232817470848

赋值

当value是整体改变的时候(list/数值),内存地址也会发生改变。不同的值存放在不同的内存地址里。

当list是部分改变,内存地址还是原来的地址,值也跟着改变


  • 当value是整体改变的时候(list/数值),内存地址也会发生改变。不同的值存放在不同的内存地址里。
a = 1           # *
b = a
print(id(a))
print(id(b))
a = 3           # ***
print(a)
print(b)
print(id(a))
print(id(b))
>>>
140707619157792  # *
140707619157792
3
1
140707619157856  # ***
140707619157792
a = [1,2,3]    # *
b = a
print(id(a))
print(id(b))
a = [1]        # ***
print(a)
print(b)
print(id(a))
print(id(b))
>>>
2232832929728  # *
2232832929728
[1, 2]
[1, 2, 3]
2232832046656  # ***
2232832929728
  • 当list是部分改变,内存地址还是原来的地址,值也跟着改变
a = [1,1]
b = a
print(id(a))
print(id(b))
a[1] = 2      # ***
print(a)
print(b)
print(id(a))
print(id(b))
>>>
2232834388992
2232834388992
[1, 2]
[1, 2]
2232834388992
2232834388992

相关文章

  • Python中的浅拷贝和深拷贝

    浅拷贝 赋值 和 copy.copy() Python中的浅拷贝分为直接赋值和使用copy模块的copy方法来进行...

  • 【python】copy和赋值

    shallow copy 和 deep copy 【引用】https://blog.csdn.net/u01071...

  • copy --- 浅层 (shallow) 和深层 (deep)

    copy --- 浅层 (shallow) 和深层 (deep) 复制操作 Python 中赋值语句不复制对象,而...

  • Python深浅拷贝

    预备知识一——python的变量及其存储 在详细的了解python中赋值、copy和deepcopy之前,我们还是...

  • Python 对象拷贝

    Python 赋值只是进行对象的引用。如果拷贝一个对象,则需要使用copy模块。 copy.copy() 进行浅拷...

  • shallow VS deep copy

    Copying a list 完全可以将python的赋值理解成改变指针指向的操作。 Copy with the ...

  • 深浅复制

    Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块。 copy.cop...

  • python 浅拷贝和深拷贝

    Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块。 copy.cop...

  • python必知必会11

    Python 里面如何拷贝一个对象? 直接赋值:其实就是对象的引用(别名)。 浅拷贝 (shallow copy)...

  • 小结iOS中的copy

    介绍copy和mutableCopy 介绍深拷贝与浅拷贝 block为什么要用copy copy相对于直接赋值的好...

网友评论

      本文标题:【python】copy和赋值

      本文链接:https://www.haomeiwen.com/subject/vzjgektx.html