variable asign in python is just a reference,
and all data is object.
但是又分為mutable type (list) & immutable type (String)
Function:
mutable type :reference
immutable type:value
範例如下:
print 'List (mutable type)'
def ange_list_reference(the_list):
    print 'got', the_list
    the_list = ['and', 'we', 'can', 'not', 'lie']
    print 'set to', the_list
outer_list = ['we', 'like', 'proper', 'English']
print 'before, outer_list =', outer_list
ange_list_reference(outer_list)
print 'after, outer_list =', outer_list
print '==================================='
print 'String(immutable type)'
def try_to_change_string_reference(the_string):
    print 'got', the_string
    the_string = 'In a kingdom by the sea'
    print 'set to', the_string
outer_string = 'It was many and many a year ago'
print 'before, outer_string =', outer_string
try_to_change_string_reference(outer_string)
print 'after, outer_string =', outer_string
print 'Int (immutable type)'
def change_int(the_int):
    print 'got', the_int
    the_int = '9'
    print 'set to ',the_int
outer_int  = 1
print 'before ,outer_int=',outer_int
change_int(outer_int)
print'after ,outer_int=' ,outer_int
print 'asign operation is use reference not copy'
print 'example:'
L = [1,2,3]
M = ['X' ,L, 'Y']
print M
print 'set L[0]=9'
L[0]=9
print M
print 'the content of M will be set too'
print'============='
print 'if dont want set M, you need use copy'
L = [1,2,3]
M = ['X',L[:],'Y']
print M
print 'set L[0]=9'
L[0] = 9
print M
print 'the content of M wont be set '
consol
=================================== String(immutable type) before, outer_string = It was many and many a year ago got It was many and many a year ago set to In a kingdom by the sea after, outer_string = It was many and many a year ago Int (immutable type) before ,outer_int= 1 got 1 set to 9 after ,outer_int= 1 asign operation is use reference not copy example: ['X', [1, 2, 3], 'Y'] set L[0]=9 ['X', [9, 2, 3], 'Y'] the content of M will be set too ============= if dont want set M, you need use copy ['X', [1, 2, 3], 'Y'] set L[0]=9 ['X', [1, 2, 3], 'Y'] the content of M wont be set
 
沒有留言:
張貼留言