vals

vals

Immutability simplified

iex(5)> list1 = [1,2,3]
[1, 2, 3]
iex(6)> list2 = [4 | list1]
[4, 1, 2, 3]

I am trying to imagine how immutability works in Elixir (and in other functional languages).
When line 6 is executed there will be no new list data structure created but both list1 and list2 will refer to the same underline data structure. Is it correct assumtion???

Marked As Solved

gregvaughn

gregvaughn

Yes. In your example you’ll have a single linked list in memory, but the different variables will point to different head elements of it. Since it is a singly linked list there is no way from the list1 variable to ever go “backwards” and see element “4”.

In a general hand-wavey sense, this is how a lot of data structures work in immutable languages. You basically have one large/combined structure and different variables have different visibility to parts of it.

Also Liked

vals

vals

However, ignoring the under-the-hood implementation, the end user of the language should be under the impression that a brand new copy of the list is created. The particular implementation shown is just a trick for the sake of efficiency.

Joseph

Joseph

I’m not so sure that it’s about copying as much as it is that immutability gives us the effect that it’s like copying. As you say, it’s like that underneath for efficiency, but the interesting thing is that if we have immutable data then we don’t have to copy underneath: we know that pointing to different parts of the data (from different variables) won’t give us a different value at different times.

Where Next?

Popular in Questions Top

marius95
Hello everyone, I try to use an Javascript Event Handler in my root.html.leex file. Therefore I created a function in the app.js file: ...
New
Fl4m3Ph03n1x
About me? ( if you have nothing better to do than reading about some random guy in the internet :stuck_out_tongue: ) Hello all, this is ...
New
myronmarston
The Elixir Typespec docs show the following syntax for keyword lists in typespecs: # ... | [key: type] # keyword lis...
New
aalberti333
As the title describes, I’m trying to run Enum.map() over a list of key/value pairs, where the value is a map. My data looks like this: ...
New
jerry
Good day to you all. I have been struggling to get a query involving like and ilike to work. Can anyone assist me on this, please? pro...
New
RisingFromAshes
I've read in another post that it may be possible with a router helper - but I couldn't find an appropriate one, and tbh, I'm still just ...
New
ycv005
I have followed this StackOverflow post to install the specific version of Erlang. And When I am running mix ecto.setup then getting fol...
New
rms.mrcs
Hi, I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list....
New
romenigld
I am trying to run a deploy with docker and I successfully runned with this command: docker build -t romenigld/blog-prod . but when I t...
New
dotdotdotPaul
Okay, I'm having a heck of a time trying to figure out how to best handle the validation of belongs_to associations in Ecto. I'm sure I'...
New

Other popular topics Top

msaraiva
Surface is an experimental library built on top of Phoenix LiveView and its new LiveComponent API that aims to provide a more declarative...
564 43591 214
New
lessless
I believe there are people here who are dealing with CSV files import on the daily basis, and since Excel is a really popular tool there ...
New
josevalim
Hi everyone, One of the features added to Elixir early on to help integration with Erlang code was the idea of overridable function defi...
New
AngeloChecked
What learn first? Rust or Elixir Hi Elixir community! I’m here because i want learn a new language. I’m a junior developer and mainly i ...
New
nobody
Hi! In PHP: $SERVER['SERVERADDR'] - in Elixir? Searched the docs for ip address and the web, no good results. Thanks!
New
KronicDeth
Elixir plugin for JetBrain’s IntelliJ Platform (including Rubymine) This is a plugin that adds support for Elixir to JetBrains IntelliJ...
289 35953 110
New
rms.mrcs
Hi, I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list....
New
joaquinalcerro
Hi there, I am working with Ecto-Postgresql and I need to call all of the records from a specific table but the table has 40,000 record...
New
marick
I had some trouble figuring out how to make many-to-many associations work. Once I got it working, I wrote a blog post. Because I'm a nov...
New
dogweather
I wrote this comment on r/haskell, and it’s not popular there. :wink: But I think I’m on to something… Haskell reminds me of Java, and e...
New

We're in Beta

About us Mission Statement