Here is an example to try and see yourself:
$ cat show-addr.c
#include <stdio.h>
int main(int argc, char **argv)
{
printf("main() is at %p\n", main);
}
$ gcc -o show-addr show-addr.c
$ file show-addr
show-addr: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 2.6.32, BuildID[sha1]=60c8b61a7040adccc90934bc79e24342eecae15a, not stripped
$ ./show-addr
main() is at 0x400526
$ ./show-addr
main() is at 0x400526
$ gcc -pie -fPIC -o show-addr.pie show-addr.c
$ file show-addr.pie
show-addr.pie: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 2.6.32, BuildID[sha1]=73ae8065a65aad4b829567b7ce3464fb5d1e3fc3, not stripped
$ ./show-addr.pie
main() is at 0x55c722ae1750
$ ./show-addr.pie
main() is at 0x5649bf97b750
$
(edit: incomplete copy-paste fixed)
PIE is a security feature, which is why it has proliferated on newer systems. See https://access.redhat.com/blogs/766093/posts/1975793