###### tags: `chapter 6` `Python`
# 6-4 進階串列操作 #
前面已經介紹不少串列常用的操作,接下來會介紹更多串列操作讓大家認識。
`index()`:利用特定變數值去尋找該變數在串列裡的`index`。
```python=
cars = ['toyota', 'nissan', 'honda']
search_index = cars.index('nissan')
print(search_index)
# 1
```
`count()`:計算特定變數在串列裡出現的次數。
```python=
cars = ['toyota', 'nissan', 'honda', 'honda', 'bmw']
num_of_honda = cars.count('honda')
print(num_of_honda)
# 2
```
`join()`:將串列元素合併,需宣告一個字元或者字串,且利用該變數作為合併字串後的分隔字元。
```python=
cars = ['toyota', 'nissan', 'honda', 'honda', 'bmw']
char = '_'
print(char.join(cars))
# toyota_nissan_honda_honda_bmw
```
## 串列的複製 ##
串列的複製會稍微複雜一點,直觀上來說應該只要指派到另外一個變數即可,但真的是這樣嗎?
```python=
MySports = ['basketball', 'baseball', 'swim']
FriendSports = MySports
```
直觀上來說,這樣代表`MySports`和`FriendSports`是一樣的,而且接下來彼此會互不干涉,但如果這時對裡面做一些操作。
```python=
MySports = ['basketball', 'baseball', 'swim']
FriendSports = MySports
MySports.append('tennis')
print(MySports)
print(FriendSports)
# ['basketball', 'baseball', 'swim', 'tennis']
# ['basketball', 'baseball', 'swim', 'tennis']
```
奇怪的事情來了,我朋友也跟著學了網球?

這個情況是因為在記憶體實作`MySports = FriendSports`部分其實只是從`FriendSports`簽一條線到`MySports`而已,並沒有真的複製一份出來,他們在底層的部分仍然共用同一份資料,追根究柢他們仍然是同一個螺絲盒!
可以使用`id(MySports)`、`id(FriendSports)`去查看兩個變數在記憶體的位置!

如果想要複製一份一樣的變數到"另一個位址",你可以這樣實作。
```python=
MySports = ['basketball', 'baseball', 'swim']
FriendSports = MySports[:]
MySports.append('tennis')
print(MySports)
print(FriendSports)
# ['basketball', 'baseball', 'swim', 'tennis']
# ['basketball', 'baseball', 'swim']
```
這樣就完成了字串的"真正"複製囉!!