python 引用傳遞所致問題

2021-07-10 13:53:40 字數 1900 閱讀 2033

首先,我們檢視下面這段**所導致的錯誤 

for subnet_info_index in subnet_infos:

# import pdb

# pdb.set_trace()

network_policy ={}

network_policy['src_ip'] = subnet_info_index['cidr']

for subnet_dst in subnet_infos:

network_policy['dst_ip'] = subnet_dst['cidr']

這個結果錯誤的主要原因是由於在python 中只有int,float,bool是傳值,其他的都是傳引用。

在這個函式中只建立了2次

network_policy

物件,因此list裡面其實只有2個物件儲存,改乙個,另外乙個也跟著改了 。

而每個物件裡面是有個2個item ,所以是4個元素。

修改的具體方法,經測試使用了2個,可以任意選擇乙個進行:

【法一】可以如下:

print "*****==***xx**********"

network_policy_list=

subnet_infos=[,]

#network_policy ={}

for subnet_info_index in subnet_infos:

network_policy ={}

network_policy['src_ip'] = subnet_info_index['cidr']

for subnet_dst in subnet_infos:

network_policy['dst_ip'] = subnet_dst['cidr']

print network_policy

#print network_policy_list

print network_policy_list

print "*****==***xx**********"

上述拷貝能成功,是因為:

dict.copy()  將乙個dict拷貝給另乙個dict,而不是傳索引(是內容拷貝了乙份,相當於值傳遞了),如

>>> dict_1 = dict.copy()

>>> dict_1['a'] = 0

>>> dict_1,dict

,如果是dict_1 = dict 那麼任意dict改變之後,另外乙個也會改變,=號賦值是引用傳遞

【法2】

print "*****==***xx**********"

network_policy_list=

subnet_infos=[,]

#network_policy ={}

for subnet_info_index in subnet_infos:

network_policy ={}

#network_policy['src_ip'] = subnet_info_index['cidr']

src_ip = subnet_info_index['cidr']

for subnet_dst in subnet_infos:

network_policy ={}

network_policy['src_ip'] = src_ip

network_policy['dst_ip'] = subnet_dst['cidr']

print network_policy

#print network_policy_list

print network_policy_list

print "*****==***xx**********"

上述方法就是:雖然還是用的引用傳遞,但是由於每次傳遞的物件都是新的,引用的物件也就都是新的,所以就不存在最開始的問題了。

引用傳遞問題

using system public class test1 p.name,num static void a1 person p,int num public class person 其實這兩個引數都是值傳遞,num就不用說了,它是值型別,所以傳遞到方法中的是它的副本,而p是引用型別,但是它沒...

Python引數傳遞 引用傳遞 值傳遞

值傳遞 方法呼叫時,實際引數把它的值傳遞給對應的形式引數,方法執行中形式引數值的改變不影響實際引數的值。a1 520 a2 a1 print a1 520 print a2 520 a2 a1 1 print a2 521 print a1 520 引用傳遞 也稱位址傳遞,在方法呼叫時,實際上是把引...

JAVA引用傳遞問題

可能有些同學覺得,只要是引用傳遞,對引用的修改直接影響著原物件,其實不然,只有對引用物件的內部做了修改,才會影響原物件,如果直接將引用修改了,則對原物件沒有影響,唯一的影響就是 這個被修改的引用,現在不是原來物件的引用,而是新物件的引用。引用傳遞指的是傳遞的時候,傳遞的是物件的引用。如果對引用的內部...