python复制和拷贝

python复制和拷贝

当运算和处理数组时,它们的数据有时被拷贝到新的数组有时不是。这有三种情况:

完全不拷贝

简单的赋值不拷贝数组对象或它们的数据。

a = arange(12)
b = a            # no new object is created
b is a           # a and b are two names for the same ndarray object

'''
True
'''
b.shape = 3,4    # changes the shape of a
a.shape 


'''
(3, 4)
'''

Python 传递不定对象作为参考,所以函数调用不拷贝数组。

def f(x):
    print (id(x))
   
id(a)
'''
4538177536
'''

f(a)
'''
4538177536
'''
视图(view)和浅复制

不同的数组对象分享同一个数据。视图方法创造一个新的数组对象指向同一数据。

c = a.view()
c is a 
'''
False
'''

c.base is a                        # c is a view of the data owned by a
'''
True
'''

c.shape = 2,6                      # a's shape doesn't change
a.shape 
'''
(3, 4)
'''

c[0,4] = 1234                      # a's data changesa
a
'''
array([[   0,    1,    2,    3],
       [1234,    5,    6,    7],
       [   8,    9,   10,   11]])
'''

切片数组返回它的一个视图:

s = a[ : , 1:3]     # spaces added for clarity; could also be written "s = a[:,1:3]"
s[:] = 10           # s[:] is a view of s. Note the difference between s=10 and s[:]=10
a
'''
array([[   0,   10,   10,    3],
       [1234,   10,   10,    7],
       [   8,   10,   10,   11]])
'''
深复制

这个方法完全复制数组和它的数据。

d = a.copy()    # a new array object with new data is created
d is a
'''
False
'''

d.base is a     # d doesn't share anything with a
'''
False
'''

d[0,0] = 9999
a
'''
array([[   0,   10,   10,    3],
       [1234,   10,   10,    7],
       [   8,   10,   10,   11]])
'''
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值