ALWAY REMEMBER TO SPECIFY DATA TYPE like bias=0.0, np.array(xxx, dtype=float)
assignment do not copy but just blinding
https://towardsdatascience.com/assignment-shallow-or-deep-a-story-about-pythons-memory-management-b8fad87bfa6c
A = [1,2,3,4]
B = A
C = A
B.append(5)
C = C + [6]
B.append(6)
# will results in "A is B", A == B == C
list.pop(index_of_element)
partial(func, args)
will return the callable function object with some of the arguments of func have already been filled in