就地操作和用户定义的功能

时间:2017-11-26 23:59:10

标签: python copy deep-copy

在用户定义的函数中使用就地操作的传统智慧是什么?在用户定义的函数中使用就地操作将违反“无副作用”#34;用户定义的函数通常遵循的格言。这非常危险!例如:

import numpy as np

np.random.seed(123)

X = np.random.rand(4,2)

def my_shuffle(Y):
    np.random.shuffle(Y)
    return(Y)

print(X)
print(my_shuffle(X))
print(X) #Oops

我的解决方案:

import numpy as np

np.random.seed(123)

X = np.random.rand(4,2)

def my_shuffle_fix(Y):
    import copy
    Y_copy = copy.deepcopy(Y)
    np.random.shuffle(Y_copy)
    return(Y_copy)

print(X)
print(my_shuffle_fix(X))
print(X) #Better

这是一个很好的解决方法吗?

0 个答案:

没有答案