十一城

跬步千里,小流江海。

Home Linux ML Python Java Thoughts KmKg BookCan Links About

2018-01-19
python中的变量地址

• 分类: python • 标签:

今天遇到了一个python中十分坑爹的问题,花了一两个小时才理清楚,有必要记录一下。

问题来源与师兄问的一道题目

1
2
3
4
5
6
7
Example
Given "abcdefg".

offset=0 => "abcdefg"
offset=1 => "gabcdef"
offset=2 => "fgabcde"
offset=3 => "efgabcd"

就是一个字符串反转的问题,代码大概如下

1
2
3
4
5
6
7
8
9
10
11
if str == None or len(str):
return str
length = len(str)
offset %= length
before = str[:(length - offset)]
after = str[(length - offset):]
print type(after)
print type(before)
str = after + before
print type(str)
return str

输出的结果明明正确,题目给出的str就是原封不动,总之尝试了各种方案还是想不明白。

最后灵光乍现,意识到也许是内存地址的问题,即lintcode检测的是初始时的id(str),因为我在后续操作将str变量指向的地址已经改变,因此如何无论str里面的结果如何正确,原始时的id(str)地址的值永远都不发生改变,写到这感觉也不能说python坑,应该说lintcode坑,为什么不去检测后来str中的值呢?难道本身就不想让我对str进行复制操作,只能通过str[i] = value的方式吗?


dzzxjl

Home Linux ML Python Java Thoughts KmKg BookCan Links About