python numpy 深拷贝 浅拷贝

发布时间 2023-05-31 18:32:11作者: 雪夜羽
import numpy as np
import copy

a=np.mat("1 2 3;4 5 6;7 8 9")
print(a)
b=a
b[0,0]=0
print(a)
print(b)
print("-"*10)

输出结果

[[1 2 3]
 [4 5 6]
 [7 8 9]]
[[0 2 3]
 [4 5 6]
 [7 8 9]]
[[0 2 3]
 [4 5 6]
 [7 8 9]]
----------

可以看到 直接赋值时改变 b 同时 改变 a 。

python 除了字符串,元组,数字等是值传递,其他则为引用传递。

import numpy as np
import copy

a=np.mat("1 2 3;4 5 6;7 8 9")
print(a)
b=a.copy()
b[0,0]=0
print(a)
print(b)
print("-"*10)

输出结果

[[1 2 3]
 [4 5 6]
 [7 8 9]]
[[1 2 3]
 [4 5 6]
 [7 8 9]]
[[0 2 3]
 [4 5 6]
 [7 8 9]]

numpy 的 copy 函数为深拷贝 浅拷贝为 b=a.view() 函数

import numpy as np
import copy

a=[[1,2,3],[4,5,6]]
print(a)
b=a.copy()
b[0][0]=0
print(a)
print(b)
print("-"*10)

输出结果

[[1, 2, 3], [4, 5, 6]]
[[0, 2, 3], [4, 5, 6]]
[[0, 2, 3], [4, 5, 6]]
----------

使用浅拷贝 只 拷贝最外层的列表结构,对内部依然是赋值

import numpy as np
import copy

a=[[1,2,3],[4,5,6]]
print(a)
b=a.copy()
b[0]=[0,2,3]
print(a)
print(b)
print("-"*10)

输出结果

[[1, 2, 3], [4, 5, 6]]
[[1, 2, 3], [4, 5, 6]]
[[0, 2, 3], [4, 5, 6]]
----------
import numpy as np
import copy

a=[[1,2,3],[4,5,6]]
print(a)
b=a.copy()
b[0]=[0,2,3]
b[0][0]=3
print(a)
print(b)
print("-"*10)

输出结果

[[1, 2, 3], [4, 5, 6]]
[[1, 2, 3], [4, 5, 6]]
[[3, 2, 3], [4, 5, 6]]
----------