Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

请教关于引用的一个问题 #98

Open
xiaoyan94 opened this issue May 5, 2016 · 3 comments
Open

请教关于引用的一个问题 #98

xiaoyan94 opened this issue May 5, 2016 · 3 comments

Comments

@xiaoyan94
Copy link

a
[9, 7, 5, 3, 1]
b
[9, 7, 5, 3, 1]
a.reverse()
a
[1, 3, 5, 7, 9]
b
[1, 3, 5, 7, 9] #为什么这里b也会变?

@lambdaplus
Copy link
Contributor


In [13]: a = [9, 7, 5, 3, 1]

In [14]: b = a

In [15]: b
Out[15]: [9, 7, 5, 3, 1]

In [16]: a.reverse()

In [17]: a
Out[17]: [1, 3, 5, 7, 9]

In [18]: b
Out[18]: [1, 3, 5, 7, 9]

上面的a和b其实是指向的同一个内存地址,修改任一个的值,都会影响到另一个。

In [26]: a.__str__
Out[26]: <method-wrapper '__str__' of list object at 0x7fc1f7f68988>

In [27]: b.__str__
Out[27]: <method-wrapper '__str__' of list object at 0x7fc1f7f68988>

下面是n是m的拷贝,m、n内存地址不同。

In [24]: m.__str__
Out[24]: <method-wrapper '__str__' of list object at 0x7fc1f7f6fdc8>

In [25]: n.__str__
Out[25]: <method-wrapper '__str__' of list object at 0x7fc1f7e6bdc8>
In [19]: m = [0, 2, 4, 6, 8]

In [20]: n = m.copy()

In [21]: m.reverse()

In [22]: m
Out[22]: [8, 6, 4, 2, 0]

In [23]: n
Out[23]: [0, 2, 4, 6, 8]

再深一点就是__深拷贝和浅拷贝__了
个人愚见。

@qiwsir
Copy link
Owner

qiwsir commented May 5, 2016

有道理。很多高级语言,都是将某些基本类型和由基本类型组合的类型,以不同的存储方式处理。

2016-05-05 17:04 GMT+08:00 lambdaplus [email protected]:


In [13]: a = [9, 7, 5, 3, 1]

In [14]: b = a

In [15]: b
Out[15]: [9, 7, 5, 3, 1]

In [16]: a.reverse()

In [17]: a
Out[17]: [1, 3, 5, 7, 9]

In [18]: b
Out[18]: [1, 3, 5, 7, 9]

上面的a和b其实是指向的_同一个内存地址_,修改任一个的值,都会影响到另一个。

In [26]: a.str
Out[26]: <method-wrapper 'str' of list object at 0x7fc1f7f68988>

In [27]: b.str
Out[27]: <method-wrapper 'str' of list object at 0x7fc1f7f68988>


下面是n是m的拷贝,m、n内存地址不同。

In [24]: m.str
Out[24]: <method-wrapper 'str' of list object at 0x7fc1f7f6fdc8>

In [25]: n.str
Out[25]: <method-wrapper 'str' of list object at 0x7fc1f7e6bdc8>

In [19]: m = [0, 2, 4, 6, 8]

In [20]: n = m.copy()

In [21]: m.reverse()

In [22]: m
Out[22]: [8, 6, 4, 2, 0]

In [23]: n
Out[23]: [0, 2, 4, 6, 8]

再深一点就是__深拷贝和浅拷贝__了
个人愚见。


You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub
#98 (comment)

QiWei

@xiaoyan94
Copy link
Author

谢谢!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants