1、Python 数组的赋值和引用

问题:数组传参,函数内数组修改,主函数数组也发生修改(引用导致)

def Change(a):
    a[0]=10
if __name__=="__main__":
    a=[1,2,3,4]
    Change(a)
    print(a)    #[10, 2, 3, 4]

list,numpy总结(引用和赋值)

import numpy as np
from copy import copy
def fun1():         #list  引用
    a=[1,2,3]
    b=a
    b[0]=100
    print("list一维数组引用:",a,b)
def fun2():     #lsit  赋值
    a=[1,2,3]
    b=a[:]
    b[0]=100
    print("list一维数组赋值(切片):",a,b)
def fun3():     #lsit  赋值
    a=[1,2,3]
    b=copy(a)
    b[0]=100
    print("list一维数组赋值(copy):",a,b)
def fun4():     #lsit  二维数组不能使用切片,只能使用copy(赋值)
    a=[[1,2],[3,4]]
    b=copy(a)
    b[0][0]=100
    print("lsit二维数组引用,不能使用切片,只能使用copy",a,b)
###############################################################
def fun5():   #numpy   引用
    a=np.array([1,2])
    b=a
    a[0]=100
    print("numpy一维数组引用",a,b)
def fun6():   #numpy   切片也为引用
    a=np.array([1,2])
    b=a[:]
    a[0]=100
    print("numpy一维数组引用(切片)",a,b)
def fun7():   #numpy   copy赋值
    a=np.array([1,2])
    b=copy(a)
    a[0]=100
    print("numpy一维数组赋值(copy)",a,b)
def fun8():   #numpy   二维数组(切片)
    a=np.array([[1,2],[3,4]])
    b=a[:,:]
    b[0][:]=100
    print("numpy二维数组引用(切片)")
    print(a)
    print(b)
def fun9():   #numpy   二维数组(copy)
    a=np.array([[1,2],[3,4]])
    b=copy(a)
    b[0][:]=100
    print("numpy二维数组赋值(copy)")
    print(a)
    print(b)
if __name__=="__main__":
    fun1()
    fun2()
    fun3()
    fun4()
    fun5()
    fun6()
    fun7()
    fun8()
    fun9()

总结:赋值一般使用copy就完事了

2、java赋值和引用

①基本数据类型和string是直接赋值

②引用数据类型是引用(数组,类,接口)