基于下面的python代码示例和图表,
>>> i=2
>>> j=i
>>> i += 2
>>> j
2
>>> s1 = 'abc'
>>> s2 = s1
>>> s1 = 'def'
>>> s2
'abc'
>>> li = ('a', 'b')
>>> lj = li
>>> lj
('a', 'b')
>>> li = ('d', 'e')
>>> lj
('a', 'b')
>>> l1 = ['physics', 'chemistry', 1997, 2000]
>>> l2 = l1
>>> l2
['physics', 'chemistry', 1997, 2000]
>>> l1.append('math')
>>> l2
['physics', 'chemistry', 1997, 2000, 'math']
>>> l1 = ['english']
>>> l2
['physics', 'chemistry', 1997, 2000, 'math']
>>>
>>> def square(x):
return mul(x, x)
>>> f = square
>>> f
<function square at 0x00000000031F9848>
>>> square
<function square at 0x00000000031F9848>
>>> def square(x):
return x * x
>>> f
<function square at 0x00000000031F9848>
>>> square
<function square at 0x000000000325D148>
我的问题是:
我可以这么说,python中没有像引用变量那样的东西吗?运行时中任何类型的变量都是name
但不是reference
,我是否正确?
答案 0 :(得分:1)
是的,这是正确的。
请注意,您的示例中没有一个实际涉及可变类型。但是,如果他们这样做了,你会看到完全相同的东西:除了,当然,你还可以改变项目的内容。
>>> ll = ['1', '2', '3']
>>> lm = ll
>>> lm
['1', '2', '3']
>>> ll.append('4')
>>> ll
['1', '2', '3', '4']
>>> lm
['1', '2', '3', '4']
>>> lm = ['5']
>>> lm
['5']
>>> ll
['1', '2', '3', '4']
请注意,更改内容会影响两个列表,但将lm
重新绑定到新列表不会影响ll
。
答案 1 :(得分:0)
排序。 Python没有pass-by-reference,如果这就是你要求的。但Python变量是对Python对象的所有引用。因此
>>> a = 1
>>> b = a
使a
和b
指向同一个对象(在本例中为整数1,但它可能是一个更复杂的对象)。你可以看到这个,因为
>>> id(a) == id(b)
True